Repository: rave
Updated Branches:
  refs/heads/master eaec64307 -> ae28a21df


RAVE-1092 | Page clone API should return the cloned page


Project: http://git-wip-us.apache.org/repos/asf/rave/repo
Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/8a1a54ba
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/8a1a54ba
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/8a1a54ba

Branch: refs/heads/master
Commit: 8a1a54ba9ce9751bc96a58f2d4bad29412d8e225
Parents: aab1719
Author: Stanton Sievers <[email protected]>
Authored: Mon Aug 11 11:10:31 2014 -0400
Committer: Stanton Sievers <[email protected]>
Committed: Mon Aug 11 11:10:31 2014 -0400

----------------------------------------------------------------------
 .../apache/rave/portal/model/impl/PageImpl.java |  6 ++-
 .../apache/rave/portal/service/PageService.java |  4 +-
 .../portal/service/impl/DefaultPageService.java | 13 ++++---
 .../service/impl/DefaultPageServiceTest.java    | 41 ++++++++++++++++++++
 .../apache/rave/portal/web/api/rpc/PageApi.java |  6 +--
 5 files changed, 57 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/8a1a54ba/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
index c14790e..9e0b524 100644
--- 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
+++ 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/model/impl/PageImpl.java
@@ -18,6 +18,8 @@
  */
 package org.apache.rave.portal.model.impl;
 
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import org.apache.rave.model.*;
 
 import java.util.List;
@@ -28,8 +30,8 @@ public class PageImpl implements Page {
     private String name;
     private String ownerId;
     private String contextId;
-    private Page parentPage;
-    private List<Page> subPages;
+    @JsonBackReference private Page parentPage;
+    @JsonManagedReference private List<Page> subPages;
     private PageLayout pageLayout;
     private List<Region> regions;
     private String pageType;

http://git-wip-us.apache.org/repos/asf/rave/blob/8a1a54ba/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
index fadb17b..3ae4fe6 100644
--- 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
+++ 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/PageService.java
@@ -297,10 +297,10 @@ public interface PageService {
      * @param pageId   - the id of the page in question
      * @param userId   - the userid to add
      * @param pageName = name of the page
-     * @return true or false whether the user was added
+     * @return the newly cloned page
      */
     @PreAuthorize("hasPermission(#pageId, 'org.apache.rave.model.Page', 
'update')")
-    Boolean clonePageForUser(String pageId, String userId, String pageName);
+    Page clonePageForUser(String pageId, String userId, String pageName);
 
     /**
      * Add another user to share this page with

http://git-wip-us.apache.org/repos/asf/rave/blob/8a1a54ba/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
index 9ee4f60..810074d 100644
--- 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
+++ 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
@@ -328,8 +328,9 @@ public class DefaultPageService implements PageService {
         return pageRepository.save(page);
     }
 
+    @Override
     @Transactional
-    public Boolean clonePageForUser(String pageId, String userId, String 
pageName) {
+    public Page clonePageForUser(String pageId, String userId, String 
pageName) {
         Page page = getPage(pageId);
         if(pageName == null || pageName.equals("null")){
             // try to use the original page name if none supplied
@@ -363,16 +364,16 @@ public class DefaultPageService implements PageService {
             }
         }
         clonedPage = getFromRepository(clonedPage.getId(), pageRepository);
+        if (clonedPage.getSubPages() == null) {
+            // Subpages should always be a list (even an empty one)
+            clonedPage.setSubPages(new ArrayList<Page>());
+        }
         clonedPage.setProperties(page.getProperties());
         // newly created page - so only one pageUser
         PageUser pageUser = clonedPage.getMembers().get(0);
         // update status to pending
         pageUser.setPageStatus(PageInvitationStatus.PENDING);
-        if(pageRepository.save(clonedPage) != null){
-            return Boolean.TRUE;
-        }else{
-            return Boolean.FALSE;
-        }
+        return pageRepository.save(clonedPage);
     }
 
     @Transactional

http://git-wip-us.apache.org/repos/asf/rave/blob/8a1a54ba/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
 
b/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
index 1646fc6..66b180d 100644
--- 
a/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
+++ 
b/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
@@ -46,6 +46,7 @@ import 
org.apache.rave.portal.repository.RegionWidgetRepository;
 import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.portal.service.PageService;
 import org.apache.rave.portal.service.UserService;
+import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.easymock.IAnswer;
 import org.junit.Before;
@@ -1453,4 +1454,44 @@ public class DefaultPageServiceTest {
 
         pageService.moveRegionWidgetToPage(VALID_REGION_WIDGET_ID, TO_PAGE_ID);
     }
+
+    @Test
+    public void clonePage_noRegions() {
+        PageLayout layout = new PageLayoutImpl("foobar");
+        layout.setNumberOfRegions(0L);
+        layout.setRenderSequence(1L);
+        page.setPageLayout(layout);
+        page.setRegions(new ArrayList<Region>());
+        page.setSubPages(new ArrayList<Page>());
+
+        expect(userService.getAuthenticatedUser()).andReturn(user);
+        expect(pageRepository.get(PAGE_ID)).andReturn(page);
+        List<Page> pages = Lists.newLinkedList();
+        pages.add(page);
+        expect(pageRepository.getAllPagesForUserType(user.getId(), 
"user")).andReturn(pages);
+        final Capture<Page> pageCapture = new Capture<Page>();
+        expect(pageRepository.save(capture(pageCapture))).andAnswer(new 
IAnswer<Page>() {
+            @Override
+            public Page answer() throws Throwable {
+                Page savedPage = (Page) EasyMock.getCurrentArguments()[0];
+                savedPage.setId("42");
+                return savedPage;
+            }
+        }).anyTimes();
+        expect(pageRepository.get("42")).andAnswer(new IAnswer<Page>() {
+            @Override
+            public Page answer() throws Throwable {
+                return pageCapture.getValue();
+            }
+        });
+
+        
expect(pageLayoutRepository.getByPageLayoutCode("foobar")).andReturn(layout);
+        expect(userService.getUserById(user.getId())).andReturn(user);
+        replay(pageLayoutRepository, pageRepository, userService);
+
+        Page clonedPage = pageService.clonePageForUser(PAGE_ID, user.getId(), 
null);
+        assertEquals("ID matches", "42", clonedPage.getId());
+        assertEquals("Owner ID is set", user.getId(), clonedPage.getOwnerId());
+        assertEquals("Layout is set", "foobar", 
clonedPage.getPageLayout().getCode());
+    }
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/8a1a54ba/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/PageApi.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/PageApi.java
 
b/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/PageApi.java
index 712456c..8fcd4fa 100644
--- 
a/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/PageApi.java
+++ 
b/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/api/rpc/PageApi.java
@@ -264,10 +264,10 @@ public class PageApi {
 
     @ResponseBody
     @RequestMapping(value = "{pageId}/clone", method = RequestMethod.POST)
-    public RpcResult<Boolean> clonePageForUser(@PathVariable final String 
pageId, @RequestParam final String userId, @RequestParam final String pageName) 
{
-        return new RpcOperation<Boolean>() {
+    public RpcResult<Page> clonePageForUser(@PathVariable final String pageId, 
@RequestParam final String userId, @RequestParam final String pageName) {
+        return new RpcOperation<Page>() {
              @Override
-             public Boolean execute() {
+             public Page execute() {
                return pageService.clonePageForUser(pageId, userId, pageName);
              }
         }.getResult();

Reply via email to