You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ie...@apache.org on 2009/02/15 11:37:30 UTC
svn commit: r744650 - in /incubator/shindig/trunk/java:
samples/src/main/java/org/apache/shindig/social/opensocial/jpa/
samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/
social-api/src/main/java/org/apache/shindig/social/opensocial/se...
Author: ieb
Date: Sun Feb 15 10:37:30 2009
New Revision: 744650
URL: http://svn.apache.org/viewvc?rev=744650&view=rev
Log:
SHINDIG-918
Patch by Ben Smith
Fixes protocol handling on /people/@me/@self so that the collection options work correctly and allow fitlering of
the current users friends.
Thanks
Modified:
incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/PersonDb.java
incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/PersonServiceDb.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/PersonHandler.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/PersonHandlerTest.java
Modified: incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/PersonDb.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/PersonDb.java?rev=744650&r1=744649&r2=744650&view=diff
==============================================================================
--- incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/PersonDb.java (original)
+++ incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/PersonDb.java Sun Feb 15 10:37:30 2009
@@ -192,7 +192,7 @@
public static final Object JPQL_FINDPERSON_BY_GROUP = null;
- public static final Object JPQL_FINDPERSON = null;
+ public static final Object JPQL_FINDPERSON = "select p from PersonDb p where ";
/**
* The internal object ID used for references to this object. Should be generated by the
Modified: incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/PersonServiceDb.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/PersonServiceDb.java?rev=744650&r1=744649&r2=744650&view=diff
==============================================================================
--- incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/PersonServiceDb.java (original)
+++ incubator/shindig/trunk/java/samples/src/main/java/org/apache/shindig/social/opensocial/jpa/spi/PersonServiceDb.java Sun Feb 15 10:37:30 2009
@@ -78,6 +78,7 @@
// either lazy or at no extra costs, the consumer will either access the properties or not
List<Person> plist = null;
int lastPos = 1;
+ Long totalResults = null;
StringBuilder sb = new StringBuilder();
// sanitize the list to get the uid's and remove duplicates
@@ -117,23 +118,31 @@
}
- int filterPos = addFilterClause(sb, PersonDb.getFilterCapability(), collectionOptions,
- lastPos);
- if (filterPos > 0) {
- paramList.add(collectionOptions.getFilterValue());
- }
-
- // Get total results, that is count the total number of rows for this query
- Long totalResults = JPQLUtils.getTotalResults(entiyManager, sb.toString(), paramList);
-
- // Execute ordered and paginated query
- if (totalResults > 0) {
- addOrderClause(sb, collectionOptions);
+ if (GroupId.Type.self.equals(groupId.getType())) {
plist = JPQLUtils.getListQuery(entiyManager, sb.toString(), paramList, collectionOptions);
- }
+ totalResults = Long.valueOf(1);
+ if (0 == plist.size()) {
+ throw new SocialSpiException(ResponseError.BAD_REQUEST, "Person not found");
+ }
+ } else {
+ int filterPos = addFilterClause(sb, PersonDb.getFilterCapability(), collectionOptions,
+ lastPos);
+ if (filterPos > 0) {
+ paramList.add(collectionOptions.getFilterValue());
+ }
- if (plist == null) {
- plist = Lists.newArrayList();
+ // Get total results, that is count the total number of rows for this query
+ totalResults = JPQLUtils.getTotalResults(entiyManager, sb.toString(), paramList);
+
+ // Execute ordered and paginated query
+ if (totalResults > 0) {
+ addOrderClause(sb, collectionOptions);
+ plist = JPQLUtils.getListQuery(entiyManager, sb.toString(), paramList, collectionOptions);
+ }
+
+ if (plist == null) {
+ plist = Lists.newArrayList();
+ }
}
// all of the above could equally have been placed into a thread to overlay the
Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/PersonHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/PersonHandler.java?rev=744650&r1=744649&r2=744650&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/PersonHandler.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/PersonHandler.java Sun Feb 15 10:37:30 2009
@@ -17,10 +17,12 @@
*/
package org.apache.shindig.social.opensocial.service;
+import org.apache.shindig.common.util.FutureUtil;
import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.protocol.HandlerPreconditions;
import org.apache.shindig.protocol.Operation;
import org.apache.shindig.protocol.RequestItem;
+import org.apache.shindig.protocol.RestfulCollection;
import org.apache.shindig.protocol.Service;
import org.apache.shindig.social.opensocial.model.Person;
import org.apache.shindig.social.opensocial.spi.CollectionOptions;
@@ -72,15 +74,21 @@
if (userIds.size() == 1) {
if (optionalPersonId.isEmpty()) {
if (groupId.getType() == GroupId.Type.self) {
- return personService.getPerson(userIds.iterator().next(), fields, request.getToken());
+ Future<RestfulCollection<Person>> people = personService.getPeople(
+ userIds, groupId, options, fields, request.getToken());
+ return FutureUtil.getFirstFromCollection(people);
} else {
return personService.getPeople(userIds, groupId, options, fields, request.getToken());
}
} else if (optionalPersonId.size() == 1) {
// TODO: Add some crazy concept to handle the userId?
- return personService.getPerson(new UserId(UserId.Type.userId,
- optionalPersonId.iterator().next()),
- fields, request.getToken());
+ Set<UserId> optionalUserIds = Sets.newHashSet(
+ new UserId(UserId.Type.userId, optionalPersonId.iterator().next()));
+
+ Future<RestfulCollection<Person>> people = personService.getPeople(
+ optionalUserIds, new GroupId(GroupId.Type.self, null),
+ options, fields, request.getToken());
+ return FutureUtil.getFirstFromCollection(people);
} else {
Set<UserId> personIds = Sets.newLinkedHashSet();
for (String pid : optionalPersonId) {
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=744650&r1=744649&r2=744650&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 Sun Feb 15 10:37:30 2009
@@ -252,6 +252,10 @@
result.add(filterFields(person, fields, Person.class));
}
+ if (GroupId.Type.self.equals(groupId.getType()) && 0 == result.size()) {
+ throw new SocialSpiException(ResponseError.BAD_REQUEST, "Person not found");
+ }
+
// We can pretend that by default the people are in top friends order
if (options.getSortBy().equals(Person.Field.NAME.toString())) {
Collections.sort(result, NAME_COMPARATOR);
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java?rev=744650&r1=744649&r2=744650&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java Sun Feb 15 10:37:30 2009
@@ -40,6 +40,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -176,13 +177,18 @@
String path = "/people/john.doe/@friends/jane.doe";
RestHandler operation = registry.getRestHandler(path, "GET");
- Person data = new PersonImpl();
+ Person person = new PersonImpl();
+ List<Person> people = Lists.newArrayList(person);
+ RestfulCollection<Person> data = new RestfulCollection<Person>(people);
// TODO: We aren't passing john.doe to the service yet.
- expect(personService.getPerson(eq(new UserId(UserId.Type.userId, "jane.doe")),
- eq(DEFAULT_FIELDS), eq(token))).andReturn(ImmediateFuture.newInstance(data));
+ expect(personService.getPeople(
+ eq(Sets.newHashSet(new UserId(UserId.Type.userId, "jane.doe"))),
+ eq(new GroupId(GroupId.Type.self, null)), eq(DEFAULT_OPTIONS),
+ eq(DEFAULT_FIELDS), eq(token)))
+ .andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, operation.execute(Maps.<String, String[]>newHashMap(),
+ assertEquals(person, operation.execute(Maps.<String, String[]>newHashMap(),
null, token, converter).get());
verify();
}
@@ -191,12 +197,17 @@
String path = "/people/john.doe/@self";
RestHandler operation = registry.getRestHandler(path, "GET");
- Person data = new PersonImpl();
- expect(personService.getPerson(eq(JOHN_DOE.iterator().next()),
- eq(DEFAULT_FIELDS), eq(token))).andReturn(ImmediateFuture.newInstance(data));
+ Person person = new PersonImpl();
+ List<Person> people = Lists.newArrayList(person);
+ RestfulCollection<Person> data = new RestfulCollection<Person>(people);
+ expect(personService.getPeople(
+ eq(JOHN_DOE),
+ eq(new GroupId(GroupId.Type.self, null)), eq(DEFAULT_OPTIONS),
+ eq(DEFAULT_FIELDS), eq(token)))
+ .andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, operation.execute(Maps.<String, String[]>newHashMap(),
+ assertEquals(person, operation.execute(Maps.<String, String[]>newHashMap(),
null, token, converter).get());
verify();
}