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