You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2011/08/10 15:15:35 UTC

svn commit: r1156168 - in /incubator/rave/trunk/rave-shindig/src: main/java/org/apache/rave/opensocial/model/ main/java/org/apache/rave/opensocial/repository/impl/ main/java/org/apache/rave/opensocial/service/impl/ main/resources/ main/resources/META-I...

Author: mfranklin
Date: Wed Aug 10 13:15:34 2011
New Revision: 1156168

URL: http://svn.apache.org/viewvc?rev=1156168&view=rev
Log:
Implemented basic repository operations (Supports RAVE-122)

Modified:
    incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Group.java
    incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java
    incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java
    incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java
    incubator/rave/trunk/rave-shindig/src/main/resources/META-INF/persistence.xml
    incubator/rave/trunk/rave-shindig/src/main/resources/initial_data.sql
    incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/repository/JpaPersonRepositoryTest.java

Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Group.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Group.java?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Group.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Group.java Wed Aug 10 13:15:34 2011
@@ -30,7 +30,14 @@ import java.util.List;
 @Entity
 @Table(name = "groups")
 @SequenceGenerator(name = "groupIdSeq", sequenceName = "group_id_seq")
+@NamedQueries(
+        @NamedQuery(name = Group.FIND_BY_ID, query="select g from Group g where g.title = :groupId")
+)
 public class Group implements BasicEntity {
+
+    public static final String FIND_BY_ID = "Group.findById";
+    public static final String ID_PARAM = "groupId";
+
     /**
      * The internal object ID used for references to this object. Should be generated by the
      * underlying storage mechanism
@@ -44,7 +51,7 @@ public class Group implements BasicEntit
      * Each group has a group name.
      */
     @Basic
-    @Column(name = "name")
+    @Column(name = "title")
     protected String title;
 
 
@@ -63,7 +70,7 @@ public class Group implements BasicEntit
     /**
      * There are many members of a group.
      */
-    @ManyToMany
+    @ManyToMany(fetch = FetchType.EAGER)
     @JoinTable(name = "group_members",
             joinColumns =
             @JoinColumn(name = "group_id", referencedColumnName = "id"),

Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/model/Person.java Wed Aug 10 13:15:34 2011
@@ -31,12 +31,15 @@ import java.util.*;
 @SequenceGenerator(name="personIdSeq", sequenceName = "person_id_seq")
 @NamedQueries(value = {
     @NamedQuery(name = Person.FIND_BY_USERNAME, query = "select p from Person p where p.username like :username"),
-    @NamedQuery(name = Person.FIND_FRIENDS_BY_USERNAME, query = "select a.followed from PersonAssociation a where a.follower.username = :username")
+    @NamedQuery(name = Person.FIND_FRIENDS_BY_USERNAME, query = "select a.followed from PersonAssociation a where a.follower.username = :username"),
+    @NamedQuery(name = Person.FIND_BY_GROUP_MEMBERSHIP, query = "select m from Group g join g.members m where exists " +
+            "(select 'found' from g.members b where b.username = :username) and m.username <> :username")
 })
 public class Person implements BasicEntity {
 
     public static final String FIND_BY_USERNAME = "Person.findByUsername";
     public static final String FIND_FRIENDS_BY_USERNAME = "Person.findFriendsByUsername";
+    public static final String FIND_BY_GROUP_MEMBERSHIP = "Person.findByGroupMembership";
     public static final String USERNAME_PARAM = "username";
 
     @Id
@@ -196,7 +199,6 @@ public class Person implements BasicEnti
             inverseJoinColumns = @JoinColumn(name = "followed_id", referencedColumnName = "id"))
     private List<Person> friends;
 
-
     @Transient
     private Url profileSong;
 

Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java Wed Aug 10 13:15:34 2011
@@ -20,11 +20,14 @@
 package org.apache.rave.opensocial.repository.impl;
 
 import org.apache.rave.exception.NotSupportedException;
+import org.apache.rave.opensocial.model.Group;
 import org.apache.rave.opensocial.model.Person;
 import org.apache.rave.opensocial.repository.PersonRepository;
 import org.apache.rave.persistence.jpa.AbstractJpaRepository;
 import org.apache.rave.persistence.jpa.util.JpaUtil;
+import org.apache.rave.util.CollectionUtils;
 import org.apache.shindig.protocol.model.FilterOperation;
+import org.springframework.asm.Type;
 import org.springframework.stereotype.Repository;
 
 import javax.persistence.EntityManager;
@@ -57,7 +60,12 @@ public class JpaPersonRepository extends
 
     @Override
     public List<Person> findAllConnectedPeople(String username) {
-        throw new NotSupportedException();
+        List<Person> connections = new ArrayList<Person>();
+        connections.addAll(findFriends(username));
+        TypedQuery<Person> members = manager.createNamedQuery(Person.FIND_BY_GROUP_MEMBERSHIP, Person.class);
+        members.setParameter(Person.USERNAME_PARAM, username);
+        CollectionUtils.addUniqueValues(members.getResultList(), connections);
+        return connections;
     }
 
     @Override
@@ -99,7 +107,10 @@ public class JpaPersonRepository extends
 
     @Override
     public List<Person> findByGroup(String groupId) {
-        throw new NotSupportedException();
+        TypedQuery<Group> query = manager.createNamedQuery(Group.FIND_BY_ID, Group.class);
+        query.setParameter(Group.ID_PARAM, groupId);
+        Group result = getSingleResult(query.getResultList());
+        return result == null ? new ArrayList<Person>() : result.getMembers();
     }
 
     @Override

Modified: incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java (original)
+++ incubator/rave/trunk/rave-shindig/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java Wed Aug 10 13:15:34 2011
@@ -41,6 +41,9 @@ import java.util.*;
  * the field set contains the requested field
  * <p/>
  * Usage of this wrapper is made possible by Shindig's use of a getter based serialization model
+ *
+ * NOTE: Setters will throw a {@link NotSupportedException} as Shindig's SPI has no method for persisting changes to
+ *       a person.
  */
 public class FieldRestrictingPerson implements org.apache.shindig.social.opensocial.model.Person, Serializable {
 
@@ -82,7 +85,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setAccounts(List<Account> accounts) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -103,7 +105,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setAddresses(List<Address> addresses) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -134,7 +135,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setBirthday(Date birthday) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -145,7 +145,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setBodyType(BodyType bodyType) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -156,7 +155,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setBooks(List<String> books) {
-        //TODO:Configure setter    
         throw new NotSupportedException();
     }
 
@@ -167,7 +165,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setCars(List<String> cars) {
-        //TODO: Collection Reconciliation  
         throw new NotSupportedException();
     }
 
@@ -188,7 +185,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setCurrentLocation(Address currentLocation) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -209,7 +205,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setEmails(List<ListField> emails) {
-        //TODO: Do setting
         throw new NotSupportedException();
     }
 
@@ -240,7 +235,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setFood(List<String> food) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -271,7 +265,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setHasApp(Boolean hasApp) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -282,7 +275,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setHeroes(List<String> heroes) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -313,7 +305,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setIms(List<ListField> ims) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -324,7 +315,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setInterests(List<String> interests) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -345,7 +335,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setLanguagesSpoken(List<String> languagesSpoken) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -376,7 +365,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setLookingFor(List<Enum<LookingFor>> lookingFor) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -387,7 +375,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setMovies(List<String> movies) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -398,7 +385,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setMusic(List<String> music) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -409,7 +395,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setName(Name name) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -440,7 +425,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setOrganizations(List<Organization> organizations) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -461,7 +445,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setPhoneNumbers(List<ListField> phoneNumbers) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -472,7 +455,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setPhotos(List<ListField> photos) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -503,7 +485,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setProfileSong(Url profileSong) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -514,7 +495,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setProfileVideo(Url profileVideo) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 
@@ -525,7 +505,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setQuotes(List<String> quotes) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -596,7 +575,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setSports(List<String> sports) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -617,7 +595,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setTags(List<String> tags) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -638,7 +615,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setTurnOffs(List<String> turnOffs) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -649,7 +625,6 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setTurnOns(List<String> turnOns) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
@@ -660,19 +635,18 @@ public class FieldRestrictingPerson impl
 
     @Override
     public void setTvShows(List<String> tvShows) {
-        //TODO: Handle Setter
         throw new NotSupportedException();
     }
 
     @Override
     public List<Url> getUrls() {
+        //TODO:Get URLs
         //return displayField(Field.URLS) ? internal.getUrls() : null;
         return null;
     }
 
     @Override
     public void setUrls(List<Url> urls) {
-        //TODO:Configure setter
         throw new NotSupportedException();
     }
 

Modified: incubator/rave/trunk/rave-shindig/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/resources/META-INF/persistence.xml?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/resources/META-INF/persistence.xml (original)
+++ incubator/rave/trunk/rave-shindig/src/main/resources/META-INF/persistence.xml Wed Aug 10 13:15:34 2011
@@ -22,20 +22,21 @@
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
   version="2.0">
   <persistence-unit name="raveShindigPersistenceUnit" transaction-type="RESOURCE_LOCAL">
-    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
-    <class>org.apache.shindig.gadgets.oauth.model.OAuthConsumerStoreDb</class>
-    <class>org.apache.shindig.gadgets.oauth.model.OAuthTokenInfoDb</class>
-    <class>org.apache.rave.opensocial.model.Person</class>
-    <class>org.apache.rave.opensocial.model.Account</class>
-    <class>org.apache.rave.opensocial.model.Address</class>
-    <class>org.apache.rave.opensocial.model.BodyType</class>
-    <class>org.apache.rave.opensocial.model.Group</class>
-    <class>org.apache.rave.opensocial.model.Name</class>
-    <class>org.apache.rave.opensocial.model.Organization</class>
-    <class>org.apache.rave.opensocial.model.Person</class>
-    <class>org.apache.rave.opensocial.model.PersonProperty</class>
-    <class>org.apache.rave.opensocial.model.PersonAssociation</class>
-    <class>org.apache.rave.opensocial.model.Url</class>
+      <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+      <class>org.apache.shindig.gadgets.oauth.model.OAuthConsumerStoreDb</class>
+      <class>org.apache.shindig.gadgets.oauth.model.OAuthTokenInfoDb</class>
+      <class>org.apache.rave.opensocial.model.Person</class>
+      <class>org.apache.rave.opensocial.model.Account</class>
+      <class>org.apache.rave.opensocial.model.Address</class>
+      <class>org.apache.rave.opensocial.model.BodyType</class>
+      <class>org.apache.rave.opensocial.model.Group</class>
+      <class>org.apache.rave.opensocial.model.Name</class>
+      <class>org.apache.rave.opensocial.model.Organization</class>
+      <class>org.apache.rave.opensocial.model.Person</class>
+      <class>org.apache.rave.opensocial.model.PersonProperty</class>
+      <class>org.apache.rave.opensocial.model.PersonAssociation</class>
+      <class>org.apache.rave.opensocial.model.Url</class>
+
       <class>org.apache.shindig.social.opensocial.jpa.ApplicationDb</class>
       <class>org.apache.shindig.social.opensocial.jpa.OrganizationDb</class>
       <class>org.apache.shindig.social.opensocial.jpa.PersonPropertyDb</class>
@@ -67,7 +68,6 @@
       <class>org.apache.shindig.social.opensocial.jpa.PersonAccountDb</class>
       <class>org.apache.shindig.social.opensocial.jpa.ApplicationDataMapValueDb</class>
       <class>org.apache.shindig.social.opensocial.jpa.UrlDb</class>
-    
   </persistence-unit>
 
 </persistence>

Modified: incubator/rave/trunk/rave-shindig/src/main/resources/initial_data.sql
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/main/resources/initial_data.sql?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/main/resources/initial_data.sql (original)
+++ incubator/rave/trunk/rave-shindig/src/main/resources/initial_data.sql Wed Aug 10 13:15:34 2011
@@ -40,3 +40,15 @@ VALUES (next value for person_associatio
 
 INSERT INTO person_association(id, follower_id, followed_id)
 VALUES (next value for person_association_id_seq, @person_id_2, @person_id_4);
+
+INSERT INTO groups(id, title, description)
+VALUES (set(@group_id_1, next value for group_id_seq), 'Party', 'Party Group');
+
+INSERT INTO groups(id, title, description)
+VALUES (set(@group_id_2, next value for group_id_seq), 'Portal', 'Portal Group');
+
+INSERT INTO group_members(group_id, person_id)
+VALUES (@group_id_1, @person_id_1);
+
+INSERT INTO group_members(group_id, person_id)
+VALUES (@group_id_1, @person_id_5);

Modified: incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/repository/JpaPersonRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/repository/JpaPersonRepositoryTest.java?rev=1156168&r1=1156167&r2=1156168&view=diff
==============================================================================
--- incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/repository/JpaPersonRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-shindig/src/test/java/org/apache/rave/opensocial/repository/JpaPersonRepositoryTest.java Wed Aug 10 13:15:34 2011
@@ -20,8 +20,6 @@
 package org.apache.rave.opensocial.repository;
 
 import org.apache.rave.opensocial.model.Person;
-import org.apache.shindig.protocol.model.FilterOperation;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +33,6 @@ import java.util.List;
 
 import static org.hamcrest.CoreMatchers.*;
 import static org.junit.Assert.assertThat;
-import static org.apache.shindig.social.opensocial.model.Person.Field.*;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations={"classpath:spring-test.xml"})
@@ -44,6 +41,8 @@ public class JpaPersonRepositoryTest {
     private static final String VALID_USER = "canonical";
     private static final String VALID_USER2 = "john.doe";
     private static final String VALID_USER3 = "jane.doe";
+    private static final String VALID_USER4 = "george.doe";
+    private static final String VALID_USER5 = "mario.rossi";
     private static final String INVALID_USERNAME = "INVALID_USERNAME";
     private static final String FEMALE = "female";
 
@@ -72,19 +71,40 @@ public class JpaPersonRepositoryTest {
         assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER2)));
         assertThat(connected.get(1).getUsername(), is(equalTo(VALID_USER3)));
     }
+    @Test
+    public void findFriends_invalid() {
+        List<Person> connected = repository.findFriends(INVALID_USERNAME);
+        assertThat(connected.isEmpty(), is(true));
+    }
 
     @Test
-    @Ignore
-    public void findFilteredFriends_valid() {
-        List<Person> connected = repository.findFriends(VALID_USER, GENDER.toString(), FilterOperation.equals, FEMALE);
-        assertThat(connected.size(), is(equalTo(1)));
-        assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER3)));
+    public void findConnected_valid() {
+        List<Person> connected = repository.findAllConnectedPeople(VALID_USER);
+        assertThat(connected.size(), is(equalTo(3)));
+        assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER2)));
+        assertThat(connected.get(1).getUsername(), is(equalTo(VALID_USER3)));
+        assertThat(connected.get(2).getUsername(), is(equalTo(VALID_USER5)));
     }
 
     @Test
-    public void findFriends_invalid() {
+    public void findConnected_invalid() {
         List<Person> connected = repository.findFriends(INVALID_USERNAME);
         assertThat(connected.isEmpty(), is(true));
     }
 
+    @Test
+    public void findByGroup_valid() {
+        List<Person> connected = repository.findByGroup("Party");
+        assertThat(connected.size(), is(equalTo(2)));
+        assertThat(connected.get(0).getUsername(), is(equalTo(VALID_USER)));
+        assertThat(connected.get(1).getUsername(), is(equalTo(VALID_USER5)));
+    }
+
+    @Test
+    public void findByGroup_invalid() {
+        List<Person> connected = repository.findByGroup(INVALID_USERNAME);
+        assertThat(connected.isEmpty(), is(true));
+    }
+
+
 }