Author: cgeer
Date: Mon Nov 26 20:54:19 2012
New Revision: 1413830

URL: http://svn.apache.org/viewvc?rev=1413830&view=rev
Log:
Rave-845 Fixed an issue where users with associations could not be deleted. 
Patch from Viknes B

Modified:
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/PersonRepository.java
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
    
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPersonAssociation.java
    
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
    
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
    
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/DecoratingOpenSocialPersonRepository.java

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/PersonRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/PersonRepository.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/PersonRepository.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/PersonRepository.java
 Mon Nov 26 20:54:19 2012
@@ -148,6 +148,7 @@ public interface PersonRepository extend
 
     /**
      * Finds the list of friend requests received by the user
+     * 
      * @param username the username of the user who receives the friend request
      * @return a valid List of people who sent friend request to the current 
user
      */
@@ -155,9 +156,18 @@ public interface PersonRepository extend
 
     /**
      * Finds the list of friend requests sent by the user
+     * 
      * @param username the username of the user who sent the friend request
      * @return a valid List of people to whom friend requests were sent
      */
        List<Person> findFriendRequestsSent(String username);
+
+    /**
+     * Deletes all the associations of a particular user with other users
+     * 
+     * @param userid is the userid of the user whose associations are to be 
deleted
+     * @return count of the association items deleted
+     */
+       int removeAllFriendsAndRequests(String userid);
 }
 

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
 Mon Nov 26 20:54:19 2012
@@ -259,12 +259,15 @@ public class DefaultUserService implemen
         int numWidgetsOwned = widgetRepository.unassignWidgetOwner(userId);
         // unassign the user from any category records they created or modified
         int numCategoriesTouched = 
categoryRepository.removeFromCreatedOrModifiedFields(userId);
+        // remove any person associations created with other users
+        int numAssociationsRemoved = 
personRepository.removeAllFriendsAndRequests(userId);
 
         // finally delete the user
         userRepository.delete(user);
         log.info("Deleted user [" + userId + ',' + username + "] - numPages: " 
+ numDeletedPages + ", numPersonPages:" +
                  numDeletedPersonPages + ", numWidgetComments: " + 
numWidgetComments + ", numWidgetRatings: " +
-                 numWidgetRatings + ", numWidgetsOwned: " + numWidgetsOwned + 
",numCategoriesTouched:" + numCategoriesTouched);
+                 numWidgetRatings + ", numWidgetsOwned: " + numWidgetsOwned + 
", numCategoriesTouched:" + numCategoriesTouched +
+                 ", numAssociationRemoved:" + numAssociationsRemoved);
     }
 
     @Override

Modified: 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPersonAssociation.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPersonAssociation.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPersonAssociation.java
 (original)
+++ 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPersonAssociation.java
 Mon Nov 26 20:54:19 2012
@@ -46,13 +46,16 @@ import org.apache.rave.persistence.Basic
 @Table(name = "person_association",
         uniqueConstraints = @UniqueConstraint(columnNames = {"follower_id", 
"followedby_id"}))
 @NamedQueries(value = {
-               @NamedQuery(name = 
JpaPersonAssociation.FIND_ASSOCIATION_ITEM_BY_USERNAMES, query = "select a from 
JpaPersonAssociation a where a.follower.username = :follower_username and 
a.followedby.username = :followedby_username")
+               @NamedQuery(name = 
JpaPersonAssociation.FIND_ASSOCIATION_ITEM_BY_USERNAMES, query = "select a from 
JpaPersonAssociation a where a.follower.username = :follower_username and 
a.followedby.username = :followedby_username"),
+               @NamedQuery(name = 
JpaPersonAssociation.DELETE_ASSOCIATION_ITEMS_BY_USERID, query = "delete from 
JpaPersonAssociation a where a.follower.entityId = :userid or 
a.followedby.entityId = :userid")
 })
 public class JpaPersonAssociation implements BasicEntity {
 
     public static final String FOLLOWER_USERNAME = "follower_username";
     public static final String FOLLOWEDBY_USERNAME = "followedby_username";
+    public static final String USERID = "userid";
     public static final String FIND_ASSOCIATION_ITEM_BY_USERNAMES = 
"PersonAssociation.findAssociationItemByUsernames";
+    public static final String DELETE_ASSOCIATION_ITEMS_BY_USERID = 
"PersonAssociation.deleteAssociationItemsByUserid";
 
     @Id
     @Column(name = "entity_id")

Modified: 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
 (original)
+++ 
rave/trunk/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPersonRepository.java
 Mon Nov 26 20:54:19 2012
@@ -92,20 +92,18 @@ public class JpaPersonRepository impleme
         return 
CollectionUtils.<Person>toBaseTypedList(friends.getResultList());
     }
 
-
-    @SuppressWarnings({"rawtypes", "unchecked"})
     @Override
     public List<Person> findFriends(String username, String appId) {
         List<Person> friendsUsingWidget = new ArrayList<Person>();
 
-        TypedQuery query = 
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_URL, JpaWidget.class);
-        query.setParameter(JpaWidget.PARAM_URL, appId);
-        final List<JpaWidget> resultList = query.getResultList();
+        TypedQuery<JpaWidget> widgetQuery = 
manager.createNamedQuery(JpaWidget.WIDGET_GET_BY_URL, JpaWidget.class);
+        widgetQuery.setParameter(JpaWidget.PARAM_URL, appId);
+        final List<JpaWidget> resultList = widgetQuery.getResultList();
         Widget widget = getSingleResult(resultList);
 
-        query = 
manager.createNamedQuery(JpaUser.USER_GET_ALL_FOR_ADDED_WIDGET, JpaUser.class);
-        query.setParameter(JpaUser.PARAM_WIDGET_ID, 
Long.parseLong(widget.getId()));
-        List<User> widgetUsers = query.getResultList();
+        TypedQuery<JpaUser> usersQuery = 
manager.createNamedQuery(JpaUser.USER_GET_ALL_FOR_ADDED_WIDGET, JpaUser.class);
+        usersQuery.setParameter(JpaUser.PARAM_WIDGET_ID, 
Long.parseLong(widget.getId()));
+        List<User> widgetUsers = 
CollectionUtils.<User>toBaseTypedList(usersQuery.getResultList());
 
         List<Person> userFriends = findFriends(username);
         for (Person userFriend : userFriends) {
@@ -246,6 +244,13 @@ public class JpaPersonRepository impleme
 
         return receiverItem.getEntityId() != null && senderItem.getEntityId() 
!= null;
     }
+    
+    @Override
+    public int removeAllFriendsAndRequests(String userid) {
+        TypedQuery<JpaPersonAssociation> query = 
manager.createNamedQuery(JpaPersonAssociation.DELETE_ASSOCIATION_ITEMS_BY_USERID,
 JpaPersonAssociation.class);
+        query.setParameter(JpaPersonAssociation.USERID, 
Long.parseLong(userid));
+        return query.executeUpdate();
+    }
 
     private List<Person> getPeopleByIds(JpaGroup result) {
         List<Person> members = Lists.newLinkedList();

Modified: 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
 (original)
+++ 
rave/trunk/rave-components/rave-jpa/src/test/java/org/apache/rave/portal/repository/impl/JpaPersonRepositoryTest.java
 Mon Nov 26 20:54:19 2012
@@ -50,6 +50,7 @@ import static org.junit.Assert.assertTha
 public class JpaPersonRepositoryTest {
 
     private static final String VALID_ID = "1";
+    private static final String VALID_ID2 = "2";
     private static final String VALID_USER = "canonical";
     private static final String VALID_USER2 = "john.doe";
     private static final String VALID_USER3 = "jane.doe";
@@ -317,6 +318,24 @@ public class JpaPersonRepositoryTest {
         assertThat(friends.get(0).getUsername(), is(equalTo(VALID_USER2)));
         assertThat(friends.get(1).getUsername(), is(equalTo(VALID_USER)));
     }
+    
+    @Test
+    @Transactional(readOnly=false)
+    @Rollback(true)
+    public void removeFriendsAndRequests() {
+        List<Person> friends = repository.findFriends(VALID_USER);
+        assertThat(friends.size(), is(equalTo(3)));
+        assertThat(friends.get(0).getUsername(), is(equalTo(VALID_USER2)));
+        assertThat(friends.get(1).getUsername(), is(equalTo(VALID_USER3)));
+        assertThat(friends.get(2).getUsername(), is(equalTo(VALID_USER4)));
+        repository.removeAllFriendsAndRequests(VALID_ID2);
+        friends = repository.findFriends(VALID_USER);
+        assertThat(friends.size(), is(equalTo(2)));
+        assertThat(friends.get(0).getUsername(), is(equalTo(VALID_USER3)));
+        assertThat(friends.get(1).getUsername(), is(equalTo(VALID_USER4)));
+        List<Person> friendsUser2 = repository.findFriends(VALID_USER2);
+        assertThat(friendsUser2.size(), is(equalTo(0)));
+    }
 
     @Test
     public void read_properties() {

Modified: 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/DecoratingOpenSocialPersonRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/DecoratingOpenSocialPersonRepository.java?rev=1413830&r1=1413829&r2=1413830&view=diff
==============================================================================
--- 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/DecoratingOpenSocialPersonRepository.java
 (original)
+++ 
rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-core/src/main/java/org/apache/rave/opensocial/repository/impl/DecoratingOpenSocialPersonRepository.java
 Mon Nov 26 20:54:19 2012
@@ -152,4 +152,9 @@ public class DecoratingOpenSocialPersonR
        public List<Person> findFriendRequestsSent(String username) {
                return underlying.findFriendRequestsSent(username);
        }
+
+       @Override
+       public int removeAllFriendsAndRequests(String userid) {
+               return underlying.removeAllFriendsAndRequests(userid);
+       }
 }


Reply via email to