You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by cg...@apache.org on 2012/11/26 21:54:28 UTC

svn commit: r1413830 - in /rave/trunk: rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/ rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/ rave-components/rave-jpa/src/main/java/org/apache/rave/portal...

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