Author: mfranklin
Date: Wed May 30 12:24:49 2012
New Revision: 1344225

URL: http://svn.apache.org/viewvc?rev=1344225&view=rev
Log:
Moved to converter model for Person (Supports RAVE-630)

Added:
    
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/
    
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java
Modified:
    
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java
    
rave/branches/model_interfaces/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/JpaPersonRepository.java

Modified: 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.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?rev=1344225&r1=1344224&r2=1344225&view=diff
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java
 (original)
+++ 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java
 Wed May 30 12:24:49 2012
@@ -18,6 +18,7 @@
  */
 package org.apache.rave.portal.model;
 
+import org.apache.rave.exception.NotSupportedException;
 import org.apache.rave.persistence.BasicEntity;
 import org.apache.rave.util.CollectionUtils;
 
@@ -129,12 +130,6 @@ public class JpaPerson implements BasicE
             inverseJoinColumns = @JoinColumn(name = "followed_id", 
referencedColumnName = "entity_id"))
     protected List<JpaPerson> friends;
 
-    public JpaPerson() {}
-
-    public JpaPerson(Person base) {
-        update(base);
-    }
-
     public Long getEntityId() {
         return entityId;
     }
@@ -280,8 +275,12 @@ public class JpaPerson implements BasicE
 
     @Override
     public void setFriends(List<Person> friends) {
-
-        this.friends = convert(friends);
+        if (friends != null) {
+            if(this.friends == null) {
+                this.friends = new ArrayList<JpaPerson>();
+            }
+            clearAndAddPeople(this.friends, friends);
+        }
     }
 
     @Override
@@ -294,35 +293,6 @@ public class JpaPerson implements BasicE
         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;
@@ -339,5 +309,16 @@ public class JpaPerson implements BasicE
     public int hashCode() {
         return entityId != null ? entityId.hashCode() : 0;
     }
+
+    private static void clearAndAddPeople(List<JpaPerson> target, List<Person> 
friends) {
+        target.clear();
+        for (Person p : friends) {
+            if (p instanceof JpaPerson) {
+                target.add((JpaPerson)p);
+            } else {
+                throw new NotSupportedException("Cannot directly set Friends 
list composed of non JPA Entities");
+            }
+        }
+    }
 }
 

Added: 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java
URL: 
http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java?rev=1344225&view=auto
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java
 (added)
+++ 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java
 Wed May 30 12:24:49 2012
@@ -0,0 +1,62 @@
+package org.apache.rave.portal.model.conversion;
+
+import org.apache.rave.portal.model.JpaPerson;
+import org.apache.rave.portal.model.Person;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.stereotype.Component;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
+
+/**
+ * Converts from a {@link org.apache.rave.portal.model.Person} to a {@link 
org.apache.rave.portal.model.JpaPerson}
+ */
+@Component
+public class JpaPersonConverter implements Converter<Person, JpaPerson> {
+    @PersistenceContext
+    private EntityManager manager;
+
+    @Override
+    public JpaPerson convert(Person source) {
+        return source instanceof JpaPerson ? (JpaPerson)source : 
createEntity(source);
+    }
+
+    private JpaPerson createEntity(Person source) {
+        JpaPerson converted;TypedQuery<JpaPerson> query = 
manager.createNamedQuery(JpaPerson.FIND_BY_USERNAME, JpaPerson.class);
+        query.setParameter(JpaPerson.USERNAME_PARAM, source.getUsername());
+        converted = getSingleResult(query.getResultList());
+
+        if(converted == null) {
+            converted = new JpaPerson();
+        }
+        updateProperties(source, converted);
+        return converted;
+    }
+
+    private void updateProperties(Person source, JpaPerson converted) {
+        converted.setUsername(source.getUsername());
+        converted.setEmail(source.getEmail());
+        converted.setDisplayName(source.getDisplayName());
+        converted.setAdditionalName(source.getUsername());
+        converted.setFamilyName(source.getFamilyName());
+        converted.setGivenName(source.getGivenName());
+        converted.setHonorificPrefix(source.getHonorificPrefix());
+        converted.setHonorificSuffix(source.getHonorificSuffix());
+        converted.setPreferredName(source.getPreferredName());
+        converted.setAboutMe(source.getAboutMe());
+        converted.setStatus(source.getStatus());
+        converted.setAddresses(source.getAddresses());
+        converted.setOrganizations(source.getOrganizations());
+        converted.setProperties(source.getProperties());
+        List<Person> newFriends = new ArrayList<Person>();
+        for(Person friend : source.getFriends()) {
+            newFriends.add(convert(friend));
+        }
+        converted.setFriends(newFriends);
+    }
+}

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=1344225&r1=1344224&r2=1344225&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
 Wed May 30 12:24:49 2012
@@ -25,8 +25,10 @@ import org.apache.rave.portal.model.JpaP
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.opensocial.repository.PersonRepository;
 import org.apache.rave.persistence.jpa.AbstractJpaRepository;
+import org.apache.rave.portal.model.conversion.JpaPersonConverter;
 import org.apache.rave.util.CollectionUtils;
 import org.apache.shindig.protocol.model.FilterOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
 
 import javax.persistence.EntityManager;
@@ -47,6 +49,9 @@ public class JpaPersonRepository impleme
     @PersistenceContext
     private EntityManager manager;
 
+    @Autowired
+    private JpaPersonConverter personConverter;
+
     @Override
     public Person findByUsername(String username) {
         TypedQuery<JpaPerson> query = 
manager.createNamedQuery(JpaPerson.FIND_BY_USERNAME, JpaPerson.class);
@@ -136,7 +141,7 @@ public class JpaPersonRepository impleme
 
     @Override
     public Person save(Person item) {
-        JpaPerson person = getJpaPerson(item);
+        JpaPerson person = personConverter.convert(item);
         return saveOrUpdate(person.getEntityId(), manager, person);
     }
 
@@ -144,19 +149,4 @@ public class JpaPersonRepository impleme
     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;
-    }
 }


Reply via email to