Author: mfranklin
Date: Mon Jun 25 20:38:15 2012
New Revision: 1353733

URL: http://svn.apache.org/viewvc?rev=1353733&view=rev
Log:
Fixed issues with PageUsers failing to constraint check (RAVE-625)

Modified:
    
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
    
rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
    
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
    
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java

Modified: 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
URL: 
http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java?rev=1353733&r1=1353732&r2=1353733&view=diff
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
 (original)
+++ 
rave/branches/model_interfaces/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
 Mon Jun 25 20:38:15 2012
@@ -523,8 +523,7 @@ public class DefaultPageService implemen
         page.setRegions(regions);
         // set this as a "user" page type
         page.setPageType(PageType.USER);
-        pageRepository.save(page);
-        return page;
+        return pageRepository.save(page);
     }
 
     private void updatePageRenderSequences(List<PageUser> pages) {

Modified: 
rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
URL: 
http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java?rev=1353733&r1=1353732&r2=1353733&view=diff
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
 (original)
+++ 
rave/branches/model_interfaces/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
 Mon Jun 25 20:38:15 2012
@@ -24,6 +24,8 @@ import org.apache.rave.portal.model.impl
 import org.apache.rave.portal.repository.*;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
+import org.easymock.EasyMock;
+import org.easymock.IAnswer;
 import org.hamcrest.CoreMatchers;
 import org.junit.Before;
 import org.junit.Test;
@@ -233,7 +235,12 @@ public class DefaultPageServiceTest {
 
         expect(userService.getAuthenticatedUser()).andReturn(user);
         
expect(pageLayoutRepository.getByPageLayoutCode(PAGE_LAYOUT_CODE)).andReturn(pageLayout);
-        expect(pageRepository.save(expectedPage)).andReturn(expectedPage);
+        expect(pageRepository.save(expectedPage)).andAnswer(new 
IAnswer<Page>() {
+            @Override
+            public Page answer() throws Throwable {
+                return (Page)EasyMock.getCurrentArguments()[0];
+            }
+        });
         
expect(pageTemplateRepository.getDefaultPage(PageType.USER)).andThrow(new 
NoResultException("No Result Exception"));
 
         expect(pageRepository.getAllPages(user.getId(), 
PageType.USER)).andReturn(new ArrayList<Page>());
@@ -262,7 +269,12 @@ public class DefaultPageServiceTest {
 
         expect(userService.getAuthenticatedUser()).andReturn(user);
         
expect(pageLayoutRepository.getByPageLayoutCode(PAGE_LAYOUT_CODE)).andReturn(pageLayout);
-        expect(pageRepository.save(expectedPage)).andReturn(expectedPage);
+        expect(pageRepository.save(expectedPage)).andAnswer(new 
IAnswer<Page>() {
+            @Override
+            public Page answer() throws Throwable {
+                return (Page)EasyMock.getCurrentArguments()[0];
+            }
+        });
         
expect(pageTemplateRepository.getDefaultPage(PageType.USER)).andThrow(new 
NonUniqueResultException("Non-Unique Result Exception"));
 
         expect(pageRepository.getAllPages(user.getId(), 
PageType.USER)).andReturn(new ArrayList<Page>());
@@ -333,7 +345,12 @@ public class DefaultPageServiceTest {
 
         expect(userService.getAuthenticatedUser()).andReturn(user);
         
expect(pageLayoutRepository.getByPageLayoutCode(PAGE_LAYOUT_CODE)).andReturn(pageLayout);
-        expect(pageRepository.save(expectedPage)).andReturn(expectedPage);
+        expect(pageRepository.save(expectedPage)).andAnswer(new 
IAnswer<Page>() {
+            @Override
+            public Page answer() throws Throwable {
+                return (Page)EasyMock.getCurrentArguments()[0];
+            }
+        });
         expect(pageRepository.getAllPages(user.getId(), 
PageType.USER)).andReturn(existingPages);
         replay(userService, pageLayoutRepository, pageRepository);
 

Modified: 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
URL: 
http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java?rev=1353733&r1=1353732&r2=1353733&view=diff
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
 (original)
+++ 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/model/JpaPage.java
 Mon Jun 25 20:38:15 2012
@@ -71,7 +71,7 @@ public class JpaPage implements BasicEnt
     @JoinColumn(name = "owner_id")
     private JpaUser owner;
 
-    @OneToOne(cascade=CascadeType.ALL)
+    @ManyToOne(cascade=CascadeType.ALL, optional = true)
     @JoinColumn(name="parent_page_id")
     private JpaPage parentPage;
 

Modified: 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java?rev=1353733&r1=1353732&r2=1353733&view=diff
==============================================================================
--- 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
 (original)
+++ 
rave/branches/model_interfaces/rave-components/rave-jpa/src/main/java/org/apache/rave/portal/repository/impl/JpaPageRepository.java
 Mon Jun 25 20:38:15 2012
@@ -62,6 +62,11 @@ public class JpaPageRepository implement
 
     @Override
     public void delete(Page item) {
+        //Must remove the page users from the page in order for OpenJpa to 
persist change
+        removePageUsers(item);
+        for(Page p : item.getSubPages()) {
+            delete(p);
+        }
         manager.remove(item instanceof JpaPage ? item : get(item.getId()));
     }
 
@@ -75,10 +80,12 @@ public class JpaPageRepository implement
 
     @Override
     public int deletePages(Long userId, PageType pageType) {
-        TypedQuery<JpaPage> query = 
manager.createNamedQuery(JpaPage.DELETE_BY_USER_ID_AND_PAGE_TYPE, 
JpaPage.class);
-        query.setParameter("userId", userId);
-        query.setParameter("pageType", pageType);
-        return query.executeUpdate();
+        List<Page> pages = getAllPages(userId, pageType);
+        int pageCount = pages.size();
+        for(Page page : pages) {
+            delete(page);
+        }
+        return pageCount;
     }
 
     @Override
@@ -110,6 +117,14 @@ public class JpaPageRepository implement
         return convert(pt, user);
     }
 
+    private void removePageUsers(Page item) {
+        for(PageUser user : item.getMembers()) {
+            user.setPage(null);
+            user.setUser(null);
+            manager.remove(user);
+        }
+    }
+
     /**
      * convert: PageTemplate, User -> Page
      * Converts the PageTemplate for Person Profiles into a Person Profile Page


Reply via email to