Return-Path: X-Original-To: apmail-incubator-rave-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-rave-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2890D74BA for ; Mon, 7 Nov 2011 21:37:44 +0000 (UTC) Received: (qmail 44582 invoked by uid 500); 7 Nov 2011 21:37:44 -0000 Delivered-To: apmail-incubator-rave-commits-archive@incubator.apache.org Received: (qmail 44547 invoked by uid 500); 7 Nov 2011 21:37:44 -0000 Mailing-List: contact rave-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: rave-dev@incubator.apache.org Delivered-To: mailing list rave-commits@incubator.apache.org Received: (qmail 44540 invoked by uid 99); 7 Nov 2011 21:37:44 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Nov 2011 21:37:44 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Nov 2011 21:37:41 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E0B32238897A; Mon, 7 Nov 2011 21:37:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1198952 - /incubator/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/repository/impl/JpaUserRepository.java Date: Mon, 07 Nov 2011 21:37:19 -0000 To: rave-commits@incubator.apache.org From: jasha@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111107213719.E0B32238897A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 queryStrings = new ArrayList(); - 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 pageQuery = manager.createNamedQuery("Page.getByUserId", Page.class); + pageQuery.setParameter("userId", user.getEntityId()); + final List 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 widgetRatingQuery = manager.createNamedQuery(WidgetRating.WIDGET_ALL_USER_RATINGS, + WidgetRating.class); + widgetRatingQuery.setParameter(WidgetRating.PARAM_USER_ID, user.getEntityId()); + final List resultList = widgetRatingQuery.getResultList(); + for (WidgetRating widgetRating : resultList) { + manager.remove(widgetRating); + } + } + + private void deleteWidgetComments(User user) { + TypedQuerywidgetCommentQuery = + manager.createQuery("SELECT wc FROM WidgetComment wc WHERE wc.user = :user", WidgetComment.class); + widgetCommentQuery.setParameter("user", user); + final List 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(); } }