You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by ja...@apache.org on 2011/11/07 18:45:16 UTC
svn commit: r1198837 - in
/incubator/rave/trunk/rave-components/rave-core/src:
main/java/org/apache/rave/portal/model/
main/java/org/apache/rave/portal/repository/
main/java/org/apache/rave/portal/repository/impl/
main/java/org/apache/rave/portal/secur...
Author: jasha
Date: Mon Nov 7 17:45:15 2011
New Revision: 1198837
URL: http://svn.apache.org/viewvc?rev=1198837&view=rev
Log:
RAVE-317 clean up User data on delete
Modified:
incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java
incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/UserRepository.java
incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java
incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java
incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/UserTest.java
incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/impl/JpaUserRepositoryTest.java
incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultUserServiceTest.java
Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/User.java Mon Nov 7 17:45:15 2011
@@ -32,6 +32,7 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.PreRemove;
@@ -41,7 +42,7 @@ import javax.persistence.Transient;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
-import javax.persistence.ManyToOne;
+import java.util.Collections;
/**
* {@inheritDoc}
@@ -297,10 +298,10 @@ public class User implements UserDetails
@PreRemove
public void preRemove() {
- for(Authority authority : authorities) {
+ for (Authority authority : authorities) {
authority.removeUser(this);
}
- this.authorities = null;
+ this.authorities = Collections.emptyList();
}
@Override
Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/UserRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/UserRepository.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/UserRepository.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/UserRepository.java Mon Nov 7 17:45:15 2011
@@ -72,4 +72,11 @@ public interface UserRepository extends
* Useful for paging.
*/
int getCountByUsernameOrEmail(String searchTerm);
+
+ /**
+ * Deletes the User and all its trails in the database
+ *
+ * @param user {@link User} to delete
+ */
+ void removeUser(User user);
}
Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java Mon Nov 7 17:45:15 2011
@@ -26,6 +26,7 @@ import org.springframework.stereotype.Re
import javax.persistence.Query;
import javax.persistence.TypedQuery;
+import java.util.ArrayList;
import java.util.List;
import static org.apache.rave.persistence.jpa.util.JpaUtil.getPagedResultList;
@@ -81,4 +82,39 @@ public class JpaUserRepository extends A
Number countResult = (Number) query.getSingleResult();
return countResult.intValue();
}
+
+ @Override
+ public void removeUser(User user) {
+ final Long userId = user.getEntityId();
+
+ String deleteRegionWidgetPreference = "DELETE FROM REGION_WIDGET_PREFERENCE WHERE REGION_WIDGET_ID IN (";
+ String selectRegionWidget = "SELECT ENTITY_ID FROM REGION_WIDGET WHERE REGION_ID IN (";
+ String deleteRegionWidget = "DELETE FROM REGION_WIDGET WHERE REGION_ID IN (";
+ String selectRegion = "SELECT ENTITY_ID FROM REGION WHERE PAGE_ID IN (";
+ String deleteRegion = "DELETE FROM REGION WHERE PAGE_ID IN (";
+ String selectPage = "SELECT ENTITY_ID FROM PAGE WHERE OWNER_ID = ?";
+ String deletePage = "DELETE FROM PAGE WHERE OWNER_ID = ?";
+
+ String deleteWidgetComment = "DELETE FROM WIDGET_COMMENT WHERE USER_ID = ?";
+ String deleteWidgetRating = "DELETE FROM WIDGET_RATING WHERE USER_ID = ?";
+ String updateWidget = "UPDATE WIDGET SET OWNER_ID = null WHERE OWNER_ID = ?";
+
+ List<String> queryStrings = new ArrayList<String>();
+ queryStrings.add(deleteRegionWidgetPreference + selectRegionWidget + selectRegion + selectPage + ")))");
+ queryStrings.add(deleteRegionWidget + selectRegion + selectPage + "))");
+ queryStrings.add(deleteRegion + selectPage + ")");
+ queryStrings.add(deletePage);
+ queryStrings.add(deleteWidgetComment);
+ queryStrings.add(deleteWidgetRating);
+ queryStrings.add(updateWidget);
+
+ final int userIdParam = 1;
+ for (String queryString : queryStrings) {
+ Query query = manager.createNativeQuery(queryString);
+ query.setParameter(userIdParam, userId);
+ query.executeUpdate();
+ }
+
+ this.delete(user);
+ }
}
Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/security/impl/DefaultWidgetPermissionEvaluator.java Mon Nov 7 17:45:15 2011
@@ -18,8 +18,9 @@
*/
package org.apache.rave.portal.security.impl;
-import org.apache.rave.portal.model.Widget;
import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.WidgetStatus;
import org.apache.rave.portal.repository.WidgetRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,7 +31,6 @@ import org.springframework.stereotype.Co
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import org.apache.rave.portal.model.WidgetStatus;
@Component
public class DefaultWidgetPermissionEvaluator extends AbstractModelPermissionEvaluator<Widget>{
@@ -130,7 +130,7 @@ public class DefaultWidgetPermissionEval
// returns a trusted Widget object, either from the WidgetRepository, or the
// cached container list
private Widget getTrustedWidget(long widgetId, List<Widget> trustedWidgetContainer) {
- Widget widget = null;
+ Widget widget;
if (trustedWidgetContainer.isEmpty()) {
widget = widgetRepository.get(widgetId);
trustedWidgetContainer.add(widget);
@@ -144,7 +144,10 @@ public class DefaultWidgetPermissionEval
// if trustedDomainObject is false, pull the entity from the database first to ensure
// the model object is trusted and hasn't been modified
private boolean isWidgetOwner(Authentication authentication, Widget widget, List<Widget> trustedWidgetContainer, boolean trustedDomainObject) {
- Widget trustedWidget = null;
+ if (widget.getOwner() == null) {
+ return false;
+ }
+ Widget trustedWidget;
if (trustedDomainObject) {
trustedWidget = widget;
} else {
@@ -162,7 +165,7 @@ public class DefaultWidgetPermissionEval
}
private boolean isPublishedWidget(Widget widget, List<Widget> trustedWidgetContainer, boolean trustedDomainObject) {
- Widget trustedWidget = null;
+ Widget trustedWidget;
if (trustedDomainObject) {
trustedWidget = widget;
} else {
@@ -172,7 +175,7 @@ public class DefaultWidgetPermissionEval
}
private boolean verifyRaveSecurityContext(Authentication authentication, RaveSecurityContext raveSecurityContext) {
- Class<?> clazz = null;
+ Class<?> clazz;
try {
clazz = Class.forName(raveSecurityContext.getType());
} catch (ClassNotFoundException ex) {
Modified: incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultUserService.java Mon Nov 7 17:45:15 2011
@@ -19,10 +19,8 @@
package org.apache.rave.portal.service.impl;
-import org.apache.rave.portal.model.Page;
import org.apache.rave.portal.model.User;
import org.apache.rave.portal.model.util.SearchResult;
-import org.apache.rave.portal.repository.PageRepository;
import org.apache.rave.portal.repository.UserRepository;
import org.apache.rave.portal.service.UserService;
import org.slf4j.Logger;
@@ -50,12 +48,9 @@ public class DefaultUserService implemen
private final UserRepository userRepository;
- private final PageRepository pageRepository;
-
@Autowired
- public DefaultUserService(UserRepository userRepository, PageRepository pageRepository) {
+ public DefaultUserService(UserRepository userRepository) {
this.userRepository = userRepository;
- this.pageRepository = pageRepository;
}
@Override
@@ -169,10 +164,7 @@ public class DefaultUserService implemen
if (user == null) {
return;
}
- for (Page page : pageRepository.getAllPages(userId)) {
- pageRepository.delete(page);
- }
- userRepository.delete(user);
+ userRepository.removeUser(user);
}
}
\ No newline at end of file
Modified: incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/UserTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/UserTest.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/UserTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/model/UserTest.java Mon Nov 7 17:45:15 2011
@@ -21,6 +21,10 @@ package org.apache.rave.portal.model;
import org.junit.Before;
import org.junit.Test;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -99,4 +103,27 @@ public class UserTest {
assertTrue("Account and credential expirations handled correctly", !user2.isAccountNonExpired() && !user2.isCredentialsNonExpired());
}
+ @Test
+ public void preRemove() {
+ User user = new User(123L, "DummyUser");
+
+ Collection<Authority> authorities = new ArrayList<Authority>();
+ Authority authority = new Authority();
+ authority.setEntityId(456L);
+ authority.setAuthority("DummyAuthority");
+ authority.addUser(user);
+ authorities.add(authority);
+
+ user.addAuthority(authority);
+
+ assertFalse(user.getAuthorities().isEmpty());
+ assertEquals(authorities, user.getAuthorities());
+ assertEquals(user, authority.getUsers().iterator().next());
+
+ user.preRemove();
+
+ assertTrue(user.getAuthorities().isEmpty());
+ assertTrue(authority.getUsers().isEmpty());
+ }
+
}
Modified: incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/impl/JpaUserRepositoryTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/impl/JpaUserRepositoryTest.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/impl/JpaUserRepositoryTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/repository/impl/JpaUserRepositoryTest.java Mon Nov 7 17:45:15 2011
@@ -21,7 +21,10 @@ package org.apache.rave.portal.repositor
import junit.framework.Assert;
import org.apache.rave.portal.model.Authority;
+import org.apache.rave.portal.model.Page;
import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.repository.AuthorityRepository;
+import org.apache.rave.portal.repository.UserRepository;
import org.hamcrest.CoreMatchers;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,10 +35,10 @@ import org.springframework.transaction.a
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
import java.util.List;
-import org.apache.rave.portal.repository.AuthorityRepository;
-import org.apache.rave.portal.repository.UserRepository;
+import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
@@ -163,4 +166,21 @@ public class JpaUserRepositoryTest {
int count = repository.getCountByUsernameOrEmail(searchTerm);
assertTrue(count > 1);
}
+
+ @Test
+ public void removeUser() {
+ User user = repository.get(USER_ID);
+ assertNotNull(user);
+ final TypedQuery<Page> pageQuery = manager.createNamedQuery("Page.getByUserId", Page.class);
+ pageQuery.setParameter("userId", USER_ID);
+ List<Page> pages = pageQuery.getResultList();
+ assertFalse("User has pages", pages.isEmpty());
+
+ repository.removeUser(user);
+
+ user = repository.get(USER_ID);
+ assertNull(user);
+ pages = pageQuery.getResultList();
+ assertTrue("User has no pages", pages.isEmpty());
+ }
}
Modified: incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultUserServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultUserServiceTest.java?rev=1198837&r1=1198836&r2=1198837&view=diff
==============================================================================
--- incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultUserServiceTest.java (original)
+++ incubator/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultUserServiceTest.java Mon Nov 7 17:45:15 2011
@@ -23,7 +23,6 @@ import org.apache.rave.portal.model.Auth
import org.apache.rave.portal.model.Page;
import org.apache.rave.portal.model.User;
import org.apache.rave.portal.model.util.SearchResult;
-import org.apache.rave.portal.repository.PageRepository;
import org.apache.rave.portal.repository.UserRepository;
import org.apache.rave.portal.service.UserService;
import org.junit.After;
@@ -41,7 +40,6 @@ import org.springframework.security.core
import java.util.ArrayList;
import java.util.List;
-import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
@@ -59,15 +57,13 @@ public class DefaultUserServiceTest {
private static final Long USER_ID = 1234L;
private UserService service;
private UserRepository userRepository;
- private PageRepository pageRepository;
private static final String USER_NAME = "1234";
private static final String USER_EMAIL = "test@test.com";
@Before
public void setup() {
userRepository = createNiceMock(UserRepository.class);
- pageRepository = createMock(PageRepository.class);
- service = new DefaultUserService(userRepository, pageRepository);
+ service = new DefaultUserService(userRepository);
}
@After
@@ -247,14 +243,12 @@ public class DefaultUserServiceTest {
Page page = new Page(1L, user);
List<Page> pages = new ArrayList<Page>();
pages.add(page);
- expect(pageRepository.getAllPages(USER_ID)).andReturn(pages);
expect(userRepository.get(USER_ID)).andReturn(user).times(1);
- pageRepository.delete(page);
expectLastCall();
- replay(userRepository, pageRepository);
+ replay(userRepository);
service.deleteUser(USER_ID);
- verify(userRepository, pageRepository);
+ verify(userRepository);
assertTrue("Deleted", true);
}