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