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();
