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/30 19:16:50 UTC

svn commit: r1344356 - in /rave/branches/model_interfaces/rave-components/rave-core/src: main/java/org/apache/rave/portal/model/ main/java/org/apache/rave/portal/model/conversion/ test/java/org/apache/rave/portal/model/conversion/

Author: mfranklin
Date: Wed May 30 17:16:50 2012
New Revision: 1344356

URL: http://svn.apache.org/viewvc?rev=1344356&view=rev
Log:
Added conversion for Address (Supports RAVE-630)

Added:
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactory.java
      - copied, changed from r1344344, rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ListProxyFactory.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaAddressConverter.java
    rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactoryTest.java
      - copied, changed from r1344344, rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ListProxyFactoryTest.java
    rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/JpaAddressConverterTest.java
Removed:
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ListProxyFactory.java
    rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ListProxyFactoryTest.java
Modified:
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaAddress.java
    rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaPerson.java
    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/JpaAddress.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaAddress.java?rev=1344356&r1=1344355&r2=1344356&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaAddress.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/JpaAddress.java Wed May 30 17:16:50 2012
@@ -30,6 +30,9 @@ import javax.persistence.*;
 public class JpaAddress implements Address {
 
     public static final String FIND_BY_STREET_CITY_COUNTRY = "findByStreetCityCountry";
+    public static final String STREET_PARAM = "street";
+    public static final String CITY_PARAM = "city";
+    public static final String COUNTRY_PARAM = "country";
 
     @Id
     @Column(name = "entity_id")

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=1344356&r1=1344355&r2=1344356&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 17:16:50 2012
@@ -19,8 +19,7 @@
 package org.apache.rave.portal.model;
 
 import org.apache.rave.persistence.BasicEntity;
-import org.apache.rave.portal.model.conversion.ListProxyFactory;
-import org.apache.rave.util.CollectionUtils;
+import org.apache.rave.portal.model.conversion.ConvertingListProxyFactory;
 
 import javax.persistence.*;
 import java.util.ArrayList;
@@ -239,7 +238,7 @@ public class JpaPerson implements BasicE
     @Override
     @SuppressWarnings("unchecked")
     public List<Address> getAddresses() {
-        return ListProxyFactory.getInstance().createProxyList(Address.class, addresses);
+        return ConvertingListProxyFactory.getInstance().createProxyList(Address.class, addresses);
     }
 
     @Override
@@ -247,7 +246,8 @@ public class JpaPerson implements BasicE
         if(this.addresses == null) {
             this.addresses = new ArrayList<JpaAddress>();
         }
-        clearAndAdd(this.addresses, addresses, JpaAddress.class);
+        this.getAddresses().clear();
+        this.getAddresses().addAll(addresses);
     }
 
     @Override
@@ -263,7 +263,7 @@ public class JpaPerson implements BasicE
     @Override
     @SuppressWarnings("unchecked")
     public List<Person> getFriends() {
-        return ListProxyFactory.getInstance().createProxyList(Person.class, friends);
+        return ConvertingListProxyFactory.getInstance().createProxyList(Person.class, friends);
     }
 
     @Override
@@ -271,7 +271,9 @@ public class JpaPerson implements BasicE
         if(this.friends == null) {
             this.friends = new ArrayList<JpaPerson>();
         }
-        clearAndAdd(this.friends, friends, JpaPerson.class);
+        //Ensure that all operations go through the conversion proxy
+        this.getFriends().clear();
+        this.getFriends().addAll(friends);
     }
 
     @Override

Copied: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactory.java (from r1344344, rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ListProxyFactory.java)
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactory.java?p2=rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactory.java&p1=rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ListProxyFactory.java&r1=1344344&r2=1344356&rev=1344356&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ListProxyFactory.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactory.java Wed May 30 17:16:50 2012
@@ -16,17 +16,17 @@ import java.util.Map;
  * Creates a {@link java.util.List} proxy that converts the added object to an entity
  */
 @Component
-public class ListProxyFactory {
+public class ConvertingListProxyFactory {
 
     //Workaround for inability to access spring context without a lot of machinery
     //Will allow for a getInstance method to be called.  this is needed because the
     //Converters are all Spring beans with their own dependencies.
-    private static ListProxyFactory instance;
+    private static ConvertingListProxyFactory instance;
 
     Map<Class<?>, Converter> converterMap;
 
     @Autowired
-    public ListProxyFactory(List<ModelConverter> converters) {
+    public ConvertingListProxyFactory(List<ModelConverter> converters) {
         converterMap = new HashMap<Class<?>, Converter>();
         for(ModelConverter converter : converters) {
             converterMap.put(converter.getSourceType(), converter);
@@ -38,10 +38,10 @@ public class ListProxyFactory {
     public <E, T extends E> List createProxyList(Class<E> targetType, List<T> underlyingList) {
         return (List) Proxy.newProxyInstance(this.getClass().getClassLoader(),
                 new Class<?>[]{List.class},
-                new ListInvocationHandler<E, T>(converterMap.get(targetType), underlyingList));
+                new ConvertingListInvocationHandler<E, T>(converterMap.get(targetType), underlyingList));
     }
 
-    public static ListProxyFactory getInstance() {
+    public static ConvertingListProxyFactory getInstance() {
         if(instance == null) {
             throw new IllegalStateException("Proxy factory not yet set by the Spring context");
         }
@@ -49,7 +49,7 @@ public class ListProxyFactory {
     }
 
 
-    public static class ListInvocationHandler<S,T> implements InvocationHandler {
+    public static class ConvertingListInvocationHandler<S,T> implements InvocationHandler {
 
         public static final String ADD_METHOD = "add";
         public static final String SET_METHOD = "set";
@@ -57,7 +57,7 @@ public class ListProxyFactory {
 
         private Converter<S, T> converter;
         private List<T> underlying;
-        public ListInvocationHandler(Converter<S, T> converter, List<T> underlying) {
+        public ConvertingListInvocationHandler(Converter<S, T> converter, List<T> underlying) {
             this.converter = converter;
             this.underlying = underlying;
         }

Added: rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaAddressConverter.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaAddressConverter.java?rev=1344356&view=auto
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaAddressConverter.java (added)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaAddressConverter.java Wed May 30 17:16:50 2012
@@ -0,0 +1,60 @@
+package org.apache.rave.portal.model.conversion;
+
+import org.apache.rave.model.ModelConverter;
+import org.apache.rave.portal.model.Address;
+import org.apache.rave.portal.model.JpaAddress;
+import org.springframework.stereotype.Component;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import static org.apache.rave.persistence.jpa.util.JpaUtil.getSingleResult;
+
+/**
+ * Converts an Address to a JpaAddress
+ */
+@Component
+public class JpaAddressConverter implements ModelConverter<Address, JpaAddress> {
+
+    @PersistenceContext
+    private EntityManager manager;
+
+    @Override
+    public Class<Address> getSourceType() {
+        return Address.class;
+    }
+
+    @Override
+    public JpaAddress convert(Address source) {
+        return source instanceof JpaAddress ? (JpaAddress)source : createEntity(source);
+    }
+
+    private JpaAddress createEntity(Address source) {
+        JpaAddress converted;
+        TypedQuery<JpaAddress> query = manager.createNamedQuery(JpaAddress.FIND_BY_STREET_CITY_COUNTRY, JpaAddress.class);
+        query.setParameter(JpaAddress.STREET_PARAM, source.getStreetAddress());
+        query.setParameter(JpaAddress.CITY_PARAM, source.getLocality());
+        query.setParameter(JpaAddress.COUNTRY_PARAM, source.getCountry());
+        converted = getSingleResult(query.getResultList());
+
+        if(converted == null) {
+            converted = new JpaAddress();
+        }
+        updateProperties(source, converted);
+        return converted;
+    }
+
+    private void updateProperties(Address source, JpaAddress converted) {
+        converted.setCountry(source.getCountry());
+        converted.setLatitude(source.getLatitude());
+        converted.setLongitude(source.getLongitude());
+        converted.setLocality(source.getLocality());
+        converted.setPostalCode(source.getPostalCode());
+        converted.setRegion(source.getRegion());
+        converted.setStreetAddress(source.getStreetAddress());
+        converted.setQualifier(source.getQualifier());
+        converted.setFormatted(source.getFormatted());
+        converted.setPrimary(source.getPrimary());
+    }
+}

Modified: 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=1344356&r1=1344355&r2=1344356&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/conversion/JpaPersonConverter.java Wed May 30 17:16:50 2012
@@ -3,6 +3,7 @@ package org.apache.rave.portal.model.con
 import org.apache.rave.model.ModelConverter;
 import org.apache.rave.portal.model.JpaPerson;
 import org.apache.rave.portal.model.Person;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.convert.converter.Converter;
 import org.springframework.stereotype.Component;
 
@@ -60,10 +61,6 @@ public class JpaPersonConverter implemen
         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);
+        converted.setFriends(source.getFriends());
     }
 }

Copied: rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactoryTest.java (from r1344344, rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ListProxyFactoryTest.java)
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactoryTest.java?p2=rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactoryTest.java&p1=rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ListProxyFactoryTest.java&r1=1344344&r2=1344356&rev=1344356&view=diff
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ListProxyFactoryTest.java (original)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/ConvertingListProxyFactoryTest.java Wed May 30 17:16:50 2012
@@ -3,7 +3,6 @@ package org.apache.rave.portal.model.con
 import org.apache.rave.model.ModelConverter;
 import org.apache.rave.portal.model.Person;
 import org.apache.rave.portal.model.PersonImpl;
-import org.junit.Before;
 import org.junit.Test;
 
 import java.lang.reflect.Proxy;
@@ -16,11 +15,11 @@ import static org.junit.Assert.assertTha
 
 /**
  */
-public class ListProxyFactoryTest {
+public class ConvertingListProxyFactoryTest {
 
     @Test(expected = IllegalStateException.class)
     public void unsetInstance() {
-        ListProxyFactory.getInstance();
+        ConvertingListProxyFactory.getInstance();
     }
 
     @Test
@@ -31,9 +30,9 @@ public class ListProxyFactoryTest {
         converters.add(converterMock);
         replay(converterMock);
         List<PersonImpl> underlying = new ArrayList<PersonImpl>();
-        new ListProxyFactory(converters);
+        new ConvertingListProxyFactory(converters);
 
-        List<Person> personProxy = ListProxyFactory.getInstance().createProxyList(Person.class, underlying);
+        List<Person> personProxy = ConvertingListProxyFactory.getInstance().createProxyList(Person.class, underlying);
         assertThat(Proxy.isProxyClass(personProxy.getClass()), is(true));
     }
 
@@ -50,10 +49,10 @@ public class ListProxyFactoryTest {
         List<PersonImpl> underlying = createMock(List.class);
         expect(underlying.add(personImpl2)).andReturn(true);
         replay(underlying);
-        new ListProxyFactory(converters);
+        new ConvertingListProxyFactory(converters);
 
 
-        List<Person> personProxy = ListProxyFactory.getInstance().createProxyList(Person.class, underlying);
+        List<Person> personProxy = ConvertingListProxyFactory.getInstance().createProxyList(Person.class, underlying);
         Boolean good = personProxy.add(personImpl1);
         assertThat(good, is(true));
         verify(converterMock);
@@ -73,9 +72,9 @@ public class ListProxyFactoryTest {
         List<PersonImpl> underlying = createMock(List.class);
         expect(underlying.set(0, (PersonImpl)personImpl2)).andReturn((PersonImpl) personImpl2);
         replay(underlying);
-        new ListProxyFactory(converters);
+        new ConvertingListProxyFactory(converters);
 
-        List<Person> personProxy = ListProxyFactory.getInstance().createProxyList(Person.class, underlying);
+        List<Person> personProxy = ConvertingListProxyFactory.getInstance().createProxyList(Person.class, underlying);
         Person good = personProxy.set(0, personImpl1);
         assertThat(good, is(sameInstance(personImpl2)));
         verify(converterMock);
@@ -105,9 +104,9 @@ public class ListProxyFactoryTest {
         List<PersonImpl> underlying = createMock(List.class);
         expect(underlying.addAll(isA(List.class))).andReturn(true);
         replay(underlying);
-        new ListProxyFactory(converters);
+        new ConvertingListProxyFactory(converters);
 
-        List<Person> personProxy = ListProxyFactory.getInstance().createProxyList(Person.class, underlying);
+        List<Person> personProxy = ConvertingListProxyFactory.getInstance().createProxyList(Person.class, underlying);
         Boolean good = personProxy.addAll(toAdd);
         assertThat(good, is(true));
         verify(converterMock);

Added: rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/JpaAddressConverterTest.java
URL: http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/JpaAddressConverterTest.java?rev=1344356&view=auto
==============================================================================
--- rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/JpaAddressConverterTest.java (added)
+++ rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/conversion/JpaAddressConverterTest.java Wed May 30 17:16:50 2012
@@ -0,0 +1,6 @@
+package org.apache.rave.portal.model.conversion;
+
+/**
+ */
+public class JpaAddressConverterTest {
+}