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 2012/05/29 23:09:11 UTC

svn commit: r1343993 - in /rave/branches/model_interfaces: rave-components/rave-core/src/main/java/org/apache/rave/portal/model/ rave-components/rave-jpa/ rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/ rave-providers/rave-o...

Author: mfranklin
Date: Tue May 29 21:09:10 2012
New Revision: 1343993

URL: http://svn.apache.org/viewvc?rev=1343993&view=rev
Log:
Refactored person into an interface and fixed all failing operations (RAVE-630)

Added:
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java
      - copied, changed from r1343811, rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java
Modified:
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Group.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonAssociation.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java
    rave/branches/model_interfaces/rave-components/rave-jpa/   (props changed)
    rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/WidgetApiTest.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultAppDataService.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/resources/META-INF/persistence.xml
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/AppDataServiceTest.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java
    rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/PersonServiceTest.java

Modified: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Group.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Group.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Group.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Group.java Tue May 29 21:09:10 2012
@@ -58,7 +58,7 @@ public class Group implements BasicEntit
 
     @ManyToOne
     @JoinColumn(name = "owner_id", referencedColumnName = "entity_id")
-    private Person owner;
+    private JpaPerson owner;
 
 
     @ManyToMany(fetch = FetchType.EAGER)
@@ -67,13 +67,13 @@ public class Group implements BasicEntit
             @JoinColumn(name = "group_id", referencedColumnName = "entity_id"),
             inverseJoinColumns =
             @JoinColumn(name = "person_id", referencedColumnName = "entity_id"))
-    private List<Person> members;
+    private List<JpaPerson> members;
 
-    public Person getOwner() {
+    public JpaPerson getOwner() {
         return owner;
     }
 
-    public void setOwner(Person owner) {
+    public void setOwner(JpaPerson owner) {
         this.owner = owner;
     }
 
@@ -85,11 +85,11 @@ public class Group implements BasicEntit
         this.description = description;
     }
 
-    public List<Person> getMembers() {
+    public List<JpaPerson> getMembers() {
         return members;
     }
 
-    public void setMembers(List<Person> members) {
+    public void setMembers(List<JpaPerson> members) {
         this.members = members;
     }
 

Copied: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java (from r1343811, rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java)
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java?p2=rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java&p1=rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java&r1=1343811&r2=1343993&rev=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java Tue May 29 21:09:10 2012
@@ -19,6 +19,7 @@
 package org.apache.rave.portal.model;
 
 import org.apache.rave.persistence.BasicEntity;
+import org.apache.rave.util.CollectionUtils;
 
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
@@ -36,11 +37,8 @@ import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
 import javax.persistence.TableGenerator;
-import javax.persistence.Transient;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Represents a person in the persistence context
@@ -48,12 +46,12 @@ import java.util.Map;
 @Entity
 @Table(name = "person")
 @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_BY_GROUP_MEMBERSHIP, query = "select m from Group g join g.members m where exists " +
+    @NamedQuery(name = JpaPerson.FIND_BY_USERNAME, query = "select p from JpaPerson p where p.username like :username"),
+    @NamedQuery(name = JpaPerson.FIND_FRIENDS_BY_USERNAME, query = "select a.followed from PersonAssociation a where a.follower.username = :username"),
+    @NamedQuery(name = JpaPerson.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 class JpaPerson implements BasicEntity, Person {
 
     public static final String FIND_BY_USERNAME = "Person.findByUsername";
     public static final String FIND_FRIENDS_BY_USERNAME = "Person.findFriendsByUsername";
@@ -129,7 +127,13 @@ public class Person implements BasicEnti
     @JoinTable(name = "person_association",
             joinColumns = @JoinColumn(name = "follower_id", referencedColumnName = "entity_id"),
             inverseJoinColumns = @JoinColumn(name = "followed_id", referencedColumnName = "entity_id"))
-    protected List<Person> friends;
+    protected List<JpaPerson> friends;
+
+    public JpaPerson() {}
+
+    public JpaPerson(Person base) {
+        update(base);
+    }
 
     public Long getEntityId() {
         return entityId;
@@ -139,132 +143,192 @@ public class Person implements BasicEnti
         this.entityId = entityId;
     }
 
+    @Override
     public String getUsername() {
         return username;
     }
 
+    @Override
     public void setUsername(String username) {
         this.username = username;
     }
 
+    @Override
     public String getEmail() {
         return email;
     }
 
+    @Override
     public void setEmail(String email) {
         this.email = email;
     }
 
+    @Override
     public String getDisplayName() {
         return displayName;
     }
 
+    @Override
     public void setDisplayName(String displayName) {
         this.displayName = displayName;
     }
 
+    @Override
     public String getAboutMe() {
         return aboutMe;
     }
 
+    @Override
     public void setAboutMe(String aboutMe) {
         this.aboutMe = aboutMe;
     }
 
+    @Override
     public String getPreferredName() {
         return preferredName;
     }
 
+    @Override
     public void setPreferredName(String preferredName) {
         this.preferredName = preferredName;
     }
 
+    @Override
     public String getStatus() {
         return status;
     }
 
+    @Override
     public void setStatus(String status) {
         this.status = status;
     }
 
+    @Override
     public String getAdditionalName() {
         return additionalName;
     }
 
+    @Override
     public void setAdditionalName(String additionalName) {
         this.additionalName = additionalName;
     }
 
+    @Override
     public String getFamilyName() {
         return familyName;
     }
 
+    @Override
     public void setFamilyName(String familyName) {
         this.familyName = familyName;
     }
 
+    @Override
     public String getGivenName() {
         return givenName;
     }
 
+    @Override
     public void setGivenName(String givenName) {
         this.givenName = givenName;
     }
 
+    @Override
     public String getHonorificPrefix() {
         return honorificPrefix;
     }
 
+    @Override
     public void setHonorificPrefix(String honorificPrefix) {
         this.honorificPrefix = honorificPrefix;
     }
 
+    @Override
     public String getHonorificSuffix() {
         return honorificSuffix;
     }
 
+    @Override
     public void setHonorificSuffix(String honorificSuffix) {
         this.honorificSuffix = honorificSuffix;
     }
 
+    @Override
     public List<Address> getAddresses() {
         return addresses;
     }
 
+    @Override
     public void setAddresses(List<Address> addresses) {
         this.addresses = addresses;
     }
 
+    @Override
     public List<PersonProperty> getProperties() {
         return properties;
     }
 
+    @Override
     public void setProperties(List<PersonProperty> properties) {
         this.properties = properties;
     }
 
+    @Override
     public List<Person> getFriends() {
-        return friends;
+        return CollectionUtils.<Person>toBaseTypedList(friends);
     }
 
+    @Override
     public void setFriends(List<Person> friends) {
-        this.friends = friends;
+
+        this.friends = convert(friends);
     }
 
+    @Override
     public List<Organization> getOrganizations() {
         return organizations;
     }
 
+    @Override
     public void setOrganizations(List<Organization> organizations) {
         this.organizations = organizations;
     }
 
+    public void update(Person source) {
+        this.username = source.getUsername();
+        this.email = source.getEmail();
+        this.displayName = source.getDisplayName();
+        this.additionalName = source.getAdditionalName();
+        this.familyName = source.getFamilyName();
+        this.givenName = source.getGivenName();
+        this.honorificPrefix = source.getHonorificPrefix();
+        this.honorificSuffix = source.getHonorificSuffix();
+        this.preferredName = source.getPreferredName();
+        this.aboutMe = source.getAboutMe();
+        this.status = source.getStatus();
+        this.addresses = source.getAddresses();
+        this.organizations = source.getOrganizations();
+        this.properties = source.getProperties();
+        this.friends = convert(source.getFriends());
+    }
+
+    private List<JpaPerson> convert(List<Person> unconverted) {
+        List<JpaPerson> converted = null;
+        if (unconverted != null) {
+            converted = new ArrayList<JpaPerson>();
+            for (Person convert : unconverted) {
+                converted.add(convert instanceof JpaPerson ? (JpaPerson) convert : new JpaPerson(convert));
+            }
+        }
+        return converted;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
 
-        Person person = (Person) o;
+        JpaPerson person = (JpaPerson) o;
 
         if (entityId != null ? !entityId.equals(person.entityId) : person.entityId != null) return false;
 

Added: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java?rev=1343993&view=auto
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java (added)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/Person.java Tue May 29 21:09:10 2012
@@ -0,0 +1,72 @@
+package org.apache.rave.portal.model;
+
+import java.util.List;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: mfranklin
+ * Date: 5/29/12
+ * Time: 1:53 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface Person {
+    String getUsername();
+
+    void setUsername(String username);
+
+    String getEmail();
+
+    void setEmail(String email);
+
+    String getDisplayName();
+
+    void setDisplayName(String displayName);
+
+    String getAboutMe();
+
+    void setAboutMe(String aboutMe);
+
+    String getPreferredName();
+
+    void setPreferredName(String preferredName);
+
+    String getStatus();
+
+    void setStatus(String status);
+
+    String getAdditionalName();
+
+    void setAdditionalName(String additionalName);
+
+    String getFamilyName();
+
+    void setFamilyName(String familyName);
+
+    String getGivenName();
+
+    void setGivenName(String givenName);
+
+    String getHonorificPrefix();
+
+    void setHonorificPrefix(String honorificPrefix);
+
+    String getHonorificSuffix();
+
+    void setHonorificSuffix(String honorificSuffix);
+
+    List<Address> getAddresses();
+
+    void setAddresses(List<Address> addresses);
+
+    List<PersonProperty> getProperties();
+
+    void setProperties(List<PersonProperty> properties);
+
+    List<Person> getFriends();
+
+    void setFriends(List<Person> friends);
+
+    List<Organization> getOrganizations();
+
+    void setOrganizations(List<Organization> organizations);
+}

Modified: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonAssociation.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonAssociation.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonAssociation.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonAssociation.java Tue May 29 21:09:10 2012
@@ -40,11 +40,11 @@ public class PersonAssociation implement
 
     @OneToOne
     @JoinColumn(name="follower_id", referencedColumnName = "entity_id")
-    Person follower;
+    JpaPerson follower;
 
     @OneToOne
     @JoinColumn(name="followed_id", referencedColumnName = "entity_id")
-    Person followed;
+    JpaPerson followed;
 
     @Override
     public Long getEntityId() {
@@ -60,15 +60,15 @@ public class PersonAssociation implement
         return follower;
     }
 
-    public void setFollower(Person follower) {
+    public void setFollower(JpaPerson follower) {
         this.follower = follower;
     }
 
-    public Person getFollowed() {
+    public JpaPerson getFollowed() {
         return followed;
     }
 
-    public void setFollowed(Person followed) {
+    public void setFollowed(JpaPerson followed) {
         this.followed = followed;
     }
 

Modified: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/PersonProperty.java Tue May 29 21:09:10 2012
@@ -23,7 +23,7 @@ import org.apache.rave.persistence.Basic
 import javax.persistence.*;
 
 /**
- * A generic extension model for the {@link Person} that allows implementers to
+ * A generic extension model for the {@link JpaPerson} that allows implementers to
  * add fields to the Person not initially envisioned
  */
 @Entity

Modified: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java Tue May 29 21:09:10 2012
@@ -47,7 +47,7 @@ import java.util.Date;
                 "where lower(u.username) like :"+User.PARAM_SEARCHTERM+" or lower(u.email) like :"+User.PARAM_SEARCHTERM),
         @NamedQuery(name = User.USER_GET_ALL_FOR_ADDED_WIDGET, query = "select distinct(rw.region.page.owner) from RegionWidget rw where rw.widget.entityId = :widgetId order by rw.region.page.owner.familyName, rw.region.page.owner.givenName")
 })
-public class User extends Person implements UserDetails, BasicEntity, Serializable {
+public class User extends JpaPerson implements UserDetails, BasicEntity, Serializable {
     private static final long serialVersionUID = 1L;
 
     public static final String USER_GET_BY_USERNAME = "User.getByUsername";
@@ -354,7 +354,7 @@ public class User extends Person impleme
      * @return a Person object representing the data contained in this class
      */
     public Person toPerson() {
-        Person p = new Person();
+        JpaPerson p = new JpaPerson();
         p.setAboutMe(this.getAboutMe());
         p.setAdditionalName(this.getAdditionalName());
         p.setAddresses(this.getAddresses());

Propchange: rave/branches/model_interfaces/rave-components/rave-jpa/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue May 29 21:09:10 2012
@@ -0,0 +1 @@
+*.iml

Modified: rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/WidgetApiTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/WidgetApiTest.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/WidgetApiTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/api/rest/WidgetApiTest.java Tue May 29 21:09:10 2012
@@ -194,8 +194,8 @@ public class WidgetApiTest {
     @Test
     public void getAllUsers() {
         List<Person> persons = new ArrayList<Person>();
-        persons.add(new Person());
-        persons.add(new Person());
+        persons.add(new JpaPerson());
+        persons.add(new JpaPerson());
 
         expect(userService.getAllByAddedWidget(VALID_WIDGET_ID)).andReturn(persons);
         replay(userService);

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java Tue May 29 21:09:10 2012
@@ -21,6 +21,7 @@ package org.apache.rave.opensocial.repos
 
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.Group;
+import org.apache.rave.portal.model.JpaPerson;
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.opensocial.repository.PersonRepository;
 import org.apache.rave.persistence.jpa.AbstractJpaRepository;
@@ -35,24 +36,21 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
+import static org.apache.rave.persistence.jpa.util.JpaUtil.saveOrUpdate;
 
 /**
  *
  */
 @Repository
-public class JpaPersonRepository extends AbstractJpaRepository<Person> implements PersonRepository{
+public class JpaPersonRepository implements PersonRepository{
 
     @PersistenceContext
     private EntityManager manager;
 
-    public JpaPersonRepository() {
-        super(Person.class);
-    }
-
     @Override
     public Person findByUsername(String username) {
-        TypedQuery<Person> query = manager.createNamedQuery(Person.FIND_BY_USERNAME, Person.class);
-        query.setParameter(Person.USERNAME_PARAM, username);
+        TypedQuery<JpaPerson> query = manager.createNamedQuery(JpaPerson.FIND_BY_USERNAME, JpaPerson.class);
+        query.setParameter(JpaPerson.USERNAME_PARAM, username);
         return getSingleResult(query.getResultList());
     }
 
@@ -60,9 +58,9 @@ public class JpaPersonRepository extends
     public List<Person> findAllConnectedPeople(String username) {
         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);
+        TypedQuery<JpaPerson> members = manager.createNamedQuery(JpaPerson.FIND_BY_GROUP_MEMBERSHIP, JpaPerson.class);
+        members.setParameter(JpaPerson.USERNAME_PARAM, username);
+        CollectionUtils.addUniqueValues(CollectionUtils.<Person>toBaseTypedList(members.getResultList()), connections);
         return connections;
     }
 
@@ -83,9 +81,9 @@ public class JpaPersonRepository extends
 
     @Override
     public List<Person> findFriends(String username) {
-        TypedQuery<Person> friends = manager.createNamedQuery(Person.FIND_FRIENDS_BY_USERNAME, Person.class);
-        friends.setParameter(Person.USERNAME_PARAM, username);
-        return friends.getResultList();
+        TypedQuery<JpaPerson> friends = manager.createNamedQuery(JpaPerson.FIND_FRIENDS_BY_USERNAME, JpaPerson.class);
+        friends.setParameter(JpaPerson.USERNAME_PARAM, username);
+        return CollectionUtils.<Person>toBaseTypedList(friends.getResultList());
     }
 
     @Override
@@ -108,7 +106,7 @@ public class JpaPersonRepository extends
         TypedQuery<Group> query = manager.createNamedQuery(Group.FIND_BY_TITLE, Group.class);
         query.setParameter(Group.GROUP_ID_PARAM, groupId);
         Group result = getSingleResult(query.getResultList());
-        return result == null ? new ArrayList<Person>() : result.getMembers();
+        return result == null ? new ArrayList<Person>() : CollectionUtils.<Person>toBaseTypedList(result.getMembers());
     }
 
     @Override
@@ -125,4 +123,40 @@ public class JpaPersonRepository extends
     public List<Person> findByGroupWithFriend(String groupId, String friendUsername) {
         throw new NotSupportedException();
     }
+
+    @Override
+    public Class<? extends Person> getType() {
+        return JpaPerson.class;
+    }
+
+    @Override
+    public Person get(long id) {
+        return manager.find(JpaPerson.class, id);
+    }
+
+    @Override
+    public Person save(Person item) {
+        JpaPerson person = getJpaPerson(item);
+        return saveOrUpdate(person.getEntityId(), manager, person);
+    }
+
+    @Override
+    public void delete(Person item) {
+        manager.remove(item instanceof JpaPerson ? item : findByUsername(item.getUsername()));
+    }
+
+    private JpaPerson getJpaPerson(Person p) {
+        JpaPerson person;
+        if (p instanceof JpaPerson) {
+            person = (JpaPerson) p;
+        } else {
+            person = (JpaPerson) (findByUsername(p.getUsername()));
+            if (person == null) {
+                new JpaPerson(p);
+            } else {
+                person.update(p);
+            }
+        }
+        return person;
+    }
 }

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultAppDataService.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultAppDataService.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultAppDataService.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultAppDataService.java Tue May 29 21:09:10 2012
@@ -21,6 +21,7 @@ package org.apache.rave.opensocial.servi
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.rave.opensocial.model.ApplicationData;
+import org.apache.rave.portal.model.JpaPerson;
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.opensocial.repository.ApplicationDataRepository;
 import org.apache.rave.opensocial.service.SimplePersonService;
@@ -231,8 +232,8 @@ public class DefaultAppDataService imple
 
     private List<String> convertPeopleToUserIds(List<Person> people) {
         List<String> ids = new ArrayList<String>(people.size());
-        for (Person person : people) {
-            ids.add(String.valueOf(person.getEntityId()));
+        for (org.apache.rave.portal.model.Person person : people) {
+            ids.add(String.valueOf(person.getUsername()));
         }
         return ids;
     }

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/DefaultPersonService.java Tue May 29 21:09:10 2012
@@ -22,6 +22,7 @@ package org.apache.rave.opensocial.servi
 import com.google.common.collect.Lists;
 import org.apache.rave.opensocial.repository.PersonRepository;
 import org.apache.rave.opensocial.service.SimplePersonService;
+import org.apache.rave.portal.model.JpaPerson;
 import org.apache.rave.util.CollectionUtils;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.common.util.ImmediateFuture;

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/service/impl/FieldRestrictingPerson.java Tue May 29 21:09:10 2012
@@ -21,6 +21,7 @@ package org.apache.rave.opensocial.servi
 
 import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.Person;
 import org.apache.rave.portal.model.util.ModelUtils;
 import org.apache.rave.util.CollectionUtils;
 import org.apache.shindig.protocol.model.Enum;
@@ -38,7 +39,7 @@ import java.util.*;
 import static org.apache.rave.util.CollectionUtils.getSingleValue;
 
 /**
- * Wraps a {@link org.apache.rave.portal.model.Person} model object and returns values only if
+ * Wraps a {@link org.apache.rave.portal.model.JpaPerson} model object and returns values only if
  * 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
@@ -110,7 +111,7 @@ public class FieldRestrictingPerson impl
 
     @Override
     public List<Address> getAddresses() {
-        return displayField(Field.ADDRESSES) ? convertAddresses(internal.getAddresses()) : null;        
+        return displayField(Field.ADDRESSES) ? convertAddresses(internal.getAddresses()) : null;
     }
 
     @Override
@@ -340,7 +341,7 @@ public class FieldRestrictingPerson impl
     //REQUIRED FIELD
     @Override
     public String getId() {
-        return internal.getEntityId().toString();
+        return internal.getUsername();
     }
 
     @Override

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/resources/META-INF/persistence.xml?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/resources/META-INF/persistence.xml (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/resources/META-INF/persistence.xml Tue May 29 21:09:10 2012
@@ -23,7 +23,7 @@
   version="2.0">
   <persistence-unit name="raveShindigPersistenceUnit" transaction-type="RESOURCE_LOCAL">
       <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
-      <class>org.apache.rave.portal.model.Person</class>
+      <class>org.apache.rave.portal.model.JpaPerson</class>
       <class>org.apache.rave.portal.model.Group</class>
       <class>org.apache.rave.portal.model.PersonAssociation</class>
       <class>org.apache.rave.portal.model.PersonProperty</class>

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/AppDataServiceTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/AppDataServiceTest.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/AppDataServiceTest.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/AppDataServiceTest.java Tue May 29 21:09:10 2012
@@ -20,6 +20,7 @@
 package org.apache.rave.opensocial.service;
 
 import org.apache.rave.opensocial.model.ApplicationData;
+import org.apache.rave.portal.model.JpaPerson;
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.opensocial.repository.ApplicationDataRepository;
 import org.apache.rave.opensocial.service.impl.DefaultAppDataService;
@@ -61,7 +62,7 @@ public class AppDataServiceTest {
     private Map<String, String> validApplicationDataMap;
     private ApplicationData validApplicationData;
 
-    private Person validPerson;
+    private org.apache.rave.portal.model.Person validPerson;
 
     @Before
     public void setup() {
@@ -77,8 +78,8 @@ public class AppDataServiceTest {
         validApplicationData = new ApplicationData(VALID_APPLICATION_DATA_ID, VALID_VIEWER_ID, VALID_APPLICATION_ID,
                 validApplicationDataMap);
 
-        validPerson = new Person();
-        validPerson.setEntityId(Long.valueOf(VALID_VIEWER_ID));
+        validPerson = new JpaPerson();
+        validPerson.setUsername(VALID_VIEWER_ID);
     }
 
     @Test
@@ -390,8 +391,8 @@ public class AppDataServiceTest {
 
     private List<String> convertPeopleToUserIds(List<Person> people) {
         List<String> ids = new ArrayList<String>(people.size());
-        for (Person person : people) {
-            ids.add(String.valueOf(person.getEntityId()));
+        for (org.apache.rave.portal.model.Person person : people) {
+            ids.add(String.valueOf(person.getUsername()));
         }
         return ids;
     }

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/FieldRestrictingPersonTest.java Tue May 29 21:09:10 2012
@@ -87,7 +87,7 @@ public class FieldRestrictingPersonTest 
     @Test
     public void getId() {
         Person p = new FieldRestrictingPerson(getTestPerson(), null);
-        assertThat(p.getId(), is(equalTo(ID)));
+        assertThat(p.getId(), is(equalTo(USERNAME)));
     }
     @Test
     public void getDisplayName() {
@@ -253,7 +253,7 @@ public class FieldRestrictingPersonTest 
 
     @Test
     public void getGender_null() {
-        org.apache.rave.portal.model.Person testPerson = getTestPerson();
+        JpaPerson testPerson = getTestPerson();
         testPerson.setProperties(new ArrayList<PersonProperty>());
         Person p = new FieldRestrictingPerson(testPerson, getFieldSet(Person.Field.GENDER));
         assertThat(p.getGender(), is(nullValue()));
@@ -621,8 +621,8 @@ public class FieldRestrictingPersonTest 
         new FieldRestrictingPerson(null, null).setHappiestWhen(SUFFIX);
     }
 
-    private org.apache.rave.portal.model.Person getTestPerson() {
-        org.apache.rave.portal.model.Person person = new org.apache.rave.portal.model.Person();
+    private JpaPerson getTestPerson() {
+        JpaPerson person = new JpaPerson();
         person.setEntityId(1L);
         person.setUsername(USERNAME);
         person.setAboutMe(ABOUT_ME);

Modified: rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/PersonServiceTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/PersonServiceTest.java?rev=1343993&r1=1343992&r2=1343993&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/PersonServiceTest.java (original)
+++ rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/test/java/org/apache/rave/opensocial/service/PersonServiceTest.java Tue May 29 21:09:10 2012
@@ -23,6 +23,7 @@ import com.google.common.collect.Lists;
 import org.apache.rave.opensocial.repository.PersonRepository;
 import org.apache.rave.opensocial.service.impl.DefaultPersonService;
 import org.apache.rave.opensocial.service.impl.FieldRestrictingPerson;
+import org.apache.rave.portal.model.JpaPerson;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.protocol.ProtocolException;
 import org.apache.shindig.protocol.RestfulCollection;
@@ -507,7 +508,7 @@ public class PersonServiceTest {
     }
 
     private org.apache.rave.portal.model.Person getDbPerson() {
-        org.apache.rave.portal.model.Person dbPerson = new org.apache.rave.portal.model.Person();
+        JpaPerson dbPerson = new JpaPerson();
         dbPerson.setEntityId(Long.parseLong(ID_1));
         dbPerson.setUsername(ID_1);
         dbPerson.setDisplayName(DISPLAY_NAME);
@@ -515,7 +516,7 @@ public class PersonServiceTest {
     }
 
     private org.apache.rave.portal.model.Person getDbPerson(Long id) {
-        org.apache.rave.portal.model.Person dbPerson = new org.apache.rave.portal.model.Person();
+        JpaPerson dbPerson = new JpaPerson();
         dbPerson.setEntityId(id);
         dbPerson.setUsername(id.toString());
         dbPerson.setDisplayName(DISPLAY_NAME);