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