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