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 22:37:19 UTC

svn commit: r1198952 - /incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java

Author: jasha
Date: Mon Nov  7 21:37:19 2011
New Revision: 1198952

URL: http://svn.apache.org/viewvc?rev=1198952&view=rev
Log:
RAVE-317 replaced native queries by managed queries to delete all user data. Works in default H2 setup and in MySQL.

Modified:
    incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java

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=1198952&r1=1198951&r2=1198952&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 21:37:19 2011
@@ -20,13 +20,15 @@
 package org.apache.rave.portal.repository.impl;
 
 import org.apache.rave.persistence.jpa.AbstractJpaRepository;
+import org.apache.rave.portal.model.Page;
 import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.WidgetComment;
+import org.apache.rave.portal.model.WidgetRating;
 import org.apache.rave.portal.repository.UserRepository;
 import org.springframework.stereotype.Repository;
 
 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;
@@ -85,36 +87,47 @@ public class JpaUserRepository extends A
 
     @Override
     public void removeUser(User user) {
-        final Long userId = user.getEntityId();
+        deletePages(user);
+        deleteWidgetComments(user);
+        deleteWidgetRatings(user);
+        removeUserFromWidget(user);
 
-        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);
+    }
+
+    private void deletePages(User user) {
+        TypedQuery<Page> pageQuery = manager.createNamedQuery("Page.getByUserId", Page.class);
+        pageQuery.setParameter("userId", user.getEntityId());
+        final List<Page> resultList = pageQuery.getResultList();
+        for (Page p : resultList) {
+            // removing Page removes Region removes RegionWidget removes RegionWidgetPreference
+            manager.remove(p);
         }
+    }
 
-        this.delete(user);
+    private void deleteWidgetRatings(User user) {
+        TypedQuery<WidgetRating> widgetRatingQuery = manager.createNamedQuery(WidgetRating.WIDGET_ALL_USER_RATINGS,
+                WidgetRating.class);
+        widgetRatingQuery.setParameter(WidgetRating.PARAM_USER_ID, user.getEntityId());
+        final List<WidgetRating> resultList = widgetRatingQuery.getResultList();
+        for (WidgetRating widgetRating : resultList) {
+            manager.remove(widgetRating);
+        }
+    }
+
+    private void deleteWidgetComments(User user) {
+        TypedQuery<WidgetComment>widgetCommentQuery =
+                manager.createQuery("SELECT wc FROM WidgetComment wc WHERE wc.user = :user", WidgetComment.class);
+        widgetCommentQuery.setParameter("user", user);
+        final List<WidgetComment> resultList = widgetCommentQuery.getResultList();
+        for (WidgetComment widgetComment : resultList) {
+            manager.remove(widgetComment);
+        }
+    }
+
+    private void removeUserFromWidget(User user) {
+        Query query = manager.createQuery("UPDATE Widget w SET w.owner = null WHERE w.owner = :user");
+        query.setParameter("user", user);
+        query.executeUpdate();
     }
 }