You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by mf...@apache.org on 2014/07/03 18:46:35 UTC

[41/50] git commit: Applying patch from Stanton Sievers for RAVE-1086

Applying patch from Stanton Sievers for RAVE-1086

git-svn-id: https://svn.apache.org/repos/asf/rave/trunk@1569475 13f79535-47bb-0310-9956-ffa450edef68


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

Branch: refs/heads/angular
Commit: b806acb86764b36af321f50daed07ca9ddffced6
Parents: 902753c
Author: Matthew B. Franklin <mf...@apache.org>
Authored: Tue Feb 18 18:58:10 2014 +0000
Committer: Matthew B. Franklin <mf...@apache.org>
Committed: Tue Feb 18 18:58:10 2014 +0000

----------------------------------------------------------------------
 .../portal/service/impl/DefaultPageService.java | 127 ++++++++++++-------
 .../service/impl/DefaultPageServiceTest.java    |  44 ++++---
 .../impl/MongoDbRegionRepository.java           |  37 +++++-
 3 files changed, 142 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/b806acb8/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 5b35b37..fadc1cf 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
@@ -40,6 +40,8 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import com.google.common.collect.Lists;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -166,47 +168,7 @@ public class DefaultPageService implements PageService {
     @Override
     @Transactional
     public Page addNewSubPage(String pageName, String pageLayoutCode, Page parentPage) {
-        User user = userService.getAuthenticatedUser();
-        PageLayout pageLayout = pageLayoutRepository.getByPageLayoutCode(pageLayoutCode);
-
-        // Create regions
-        List<Region> regions = new ArrayList<Region>();
-        List<Page> parentsSubPages = new ArrayList<Page>();
-        int regionCount;
-        for (regionCount = 0; regionCount < pageLayout.getNumberOfRegions(); regionCount++) {
-            Region region = new RegionImpl();
-            region.setRenderOrder(regionCount);
-            // TODO: this should eventually be defined by the PageTemplateRegion.locked field
-            region.setLocked(false);
-            regions.add(region);
-        }
-
-        // Create a Page object and register it.
-        long renderSequence = (parentPage.getSubPages() != null) ? parentPage.getSubPages().size() + 1 : 1;
-        Page page = new PageImpl();
-        page.setName(pageName);
-        page.setOwnerId(user.getId());
-        page.setPageLayout(pageLayout);
-        page.setRegions(regions);
-        // set this as a "sub-page" page type
-        page.setPageType(PageType.SUB_PAGE.toString());
-
-        PageUser pageUser = new PageUserImpl(page.getOwnerId(), page, renderSequence);
-        pageUser.setPageStatus(PageInvitationStatus.OWNER);
-        List<PageUser> members = new ArrayList<PageUser>();
-        members.add(pageUser);
-        page.setMembers(members);
-
-        // Properly sets both sides of the circular parent-child reference
-        page.setParentPage(parentPage);
-        if (parentPage.getSubPages() != null){
-            parentsSubPages = parentPage.getSubPages();
-        }
-        parentsSubPages.add(page);
-        parentPage.setSubPages(parentsSubPages);
-        pageRepository.save(page);
-
-        return page;
+        return addNewSubPage(userService.getAuthenticatedUser(), pageName, pageLayoutCode, parentPage);
     }
 
     @Override
@@ -373,12 +335,31 @@ public class DefaultPageService implements PageService {
             // try to use the original page name if none supplied
             pageName = page.getName();
         }
-        Page clonedPage = addNewUserPage(userService.getUserById(userId), pageName, page.getPageLayout().getCode());
-        // populate all the widgets in cloned page from original
-        for(int i=0; i<page.getRegions().size(); i++){
-            for(int j=0; j<page.getRegions().get(i).getRegionWidgets().size(); j++){
-                String widgetId = page.getRegions().get(i).getRegionWidgets().get(j).getWidgetId();
-                addWidgetToPageRegion(clonedPage.getId(), widgetId, clonedPage.getRegions().get(i).getId());
+        User user = userService.getUserById(userId);
+        Page clonedPage = addNewUserPage(user, pageName, page.getPageLayout().getCode());
+        if (page.getRegions().size() == 0) {
+            // Don't want regions on the cloned page either
+            // TODO: Move this into the addNewUserPage functionality
+            List<Region> emptyRegions = Lists.newArrayList();
+            clonedPage.setRegions(emptyRegions);
+            clonedPage = pageRepository.save(clonedPage);
+        }
+        cloneRegionWidgets(page, clonedPage);
+        List<Page> subPages = page.getSubPages();
+        for(Page subPage : subPages) {
+            clonedPage = getFromRepository(clonedPage.getId(), pageRepository);
+            Page updatedPage = addNewSubPage(user, subPage.getName(), subPage.getPageLayout().getCode(), clonedPage);
+            Page clonedSubPage = null;
+            for (Page newSubPage : updatedPage.getSubPages()) {
+                // This is the only way to find the subpage we just created such that it is actually populated with region ids
+                if (newSubPage.getName().equals(subPage.getName()) && 
+                        newSubPage.getPageLayout().getCode().equals(subPage.getPageLayout().getCode())) {
+                    clonedSubPage = newSubPage;
+                    break;
+                }
+            }
+            if (clonedSubPage != null) {
+                cloneRegionWidgets(subPage, clonedSubPage);
             }
         }
         clonedPage.setProperties(page.getProperties());
@@ -637,6 +618,47 @@ public class DefaultPageService implements PageService {
         return pageRepository.save(page);
     }
 
+    private Page addNewSubPage(User user, String pageName, String pageLayoutCode, Page parentPage) {
+        PageLayout pageLayout = pageLayoutRepository.getByPageLayoutCode(pageLayoutCode);
+
+        // Create regions
+        List<Region> regions = new ArrayList<Region>();
+        List<Page> parentsSubPages = new ArrayList<Page>();
+        int regionCount;
+        for (regionCount = 0; regionCount < pageLayout.getNumberOfRegions(); regionCount++) {
+            Region region = new RegionImpl();
+            region.setRenderOrder(regionCount);
+            // TODO: this should eventually be defined by the PageTemplateRegion.locked field
+            region.setLocked(false);
+            regions.add(region);
+        }
+
+        // Create a Page object and register it.
+        long renderSequence = (parentPage.getSubPages() != null) ? parentPage.getSubPages().size() + 1 : 1;
+        Page page = new PageImpl();
+        page.setName(pageName);
+        page.setOwnerId(user.getId());
+        page.setPageLayout(pageLayout);
+        page.setRegions(regions);
+        // set this as a "sub-page" page type
+        page.setPageType(PageType.SUB_PAGE.toString());
+
+        PageUser pageUser = new PageUserImpl(page.getOwnerId(), page, renderSequence);
+        pageUser.setPageStatus(PageInvitationStatus.OWNER);
+        List<PageUser> members = new ArrayList<PageUser>();
+        members.add(pageUser);
+        page.setMembers(members);
+
+        // Properly sets both sides of the circular parent-child reference
+        page.setParentPage(parentPage);
+        if (parentPage.getSubPages() != null){
+            parentsSubPages = parentPage.getSubPages();
+        }
+        parentsSubPages.add(page);
+        parentPage.setSubPages(parentsSubPages);
+        return pageRepository.save(page);
+    }
+
     private void updatePageRenderSequences(List<PageUser> pages) {
         if (pages != null && !pages.isEmpty()) {
             for (int i = 0; i < pages.size(); i++) {
@@ -724,4 +746,15 @@ public class DefaultPageService implements PageService {
         // also traverse up and make sure its region is also not locked
         verifyRegionIsNotLocked(regionWidget.getRegion());
     }
+
+    private void cloneRegionWidgets(Page sourcePage, Page destinationPage) {
+        // populate all the widgets in cloned page from original
+        for (int i=0; i < sourcePage.getRegions().size(); i++) {
+            // Walk through this list in reverse order so the widgets get laid our correctly
+            for (int j=sourcePage.getRegions().get(i).getRegionWidgets().size() - 1; j >= 0; j--) {
+                String widgetId = sourcePage.getRegions().get(i).getRegionWidgets().get(j).getWidgetId();
+                addWidgetToPageRegion(destinationPage.getId(), widgetId, destinationPage.getRegions().get(i).getId());
+            }
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/b806acb8/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 e419112..1646fc6 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
@@ -361,24 +361,31 @@ public class DefaultPageServiceTest {
         final String PARENT_PAGE_NAME = "my parent page";
         final Long EXPECTED_RENDER_SEQUENCE = 1L;
         final Long EXPECTED_PARENT_RENDER_SEQUENCE = 1L;
+        
+        Page parentPage = new PageImpl();
+        parentPage.setName(PARENT_PAGE_NAME);
+        parentPage.setOwnerId(user.getId());
+        parentPage.setPageLayout(pageLayout);
 
         Page expectedPage = new PageImpl();
         expectedPage.setName(PAGE_NAME);
         expectedPage.setOwnerId(user.getId());
         expectedPage.setPageLayout(pageLayout);
         expectedPage.setRegions(createEmptyRegionList(pageLayout.getNumberOfRegions()));
-
-        Page parentPage = new PageImpl();
-        parentPage.setName(PARENT_PAGE_NAME);
-        parentPage.setOwnerId(user.getId());
-        parentPage.setPageLayout(pageLayout);
+        expectedPage.setPageType(PageType.SUB_PAGE.toString());
+        expectedPage.setParentPage(parentPage);
+        PageUser expectedPageUser = createMock(PageUser.class);
+        expect(expectedPageUser.getRenderSequence()).andReturn(EXPECTED_RENDER_SEQUENCE);
+        List<PageUser> pageUsers = Lists.newArrayList();
+        pageUsers.add(expectedPageUser);
+        expectedPage.setMembers(pageUsers);
 
         parentPage.setRegions(createEmptyRegionList(pageLayout.getNumberOfRegions()));
 
         expect(userService.getAuthenticatedUser()).andReturn(user);
         expect(pageLayoutRepository.getByPageLayoutCode(PAGE_LAYOUT_CODE)).andReturn(pageLayout);
         expect(pageRepository.save(expectedPage)).andReturn(expectedPage);
-        replay(userService, pageLayoutRepository,  pageRepository);
+        replay(userService, pageLayoutRepository,  pageRepository, expectedPageUser);
 
         Page newPage = pageService.addNewSubPage(PAGE_NAME, PAGE_LAYOUT_CODE, parentPage);
         assertThat(newPage.getMembers().get(0).getRenderSequence(), is(EXPECTED_RENDER_SEQUENCE));
@@ -388,7 +395,7 @@ public class DefaultPageServiceTest {
         assertThat(newPage.getParentPage(), is(parentPage));
         assertTrue(parentPage.getSubPages().contains(newPage));
 
-        verify(userService, pageLayoutRepository,  pageRepository);
+        verify(userService, pageLayoutRepository,  pageRepository, expectedPageUser);
     }
 
     @Test
@@ -399,23 +406,30 @@ public class DefaultPageServiceTest {
         List<Page> existingPages = new ArrayList<Page>();
         existingPages.add(new PageImpl());
 
-        Page expectedPage = new PageImpl();
-        expectedPage.setName(PAGE_NAME);
-        expectedPage.setOwnerId(user.getId());
-        expectedPage.setPageLayout(pageLayout);
-        expectedPage.setRegions(createEmptyRegionList(pageLayout.getNumberOfRegions()));
-
         Page parentPage = new PageImpl();
         parentPage.setName(PARENT_PAGE_NAME);
         parentPage.setOwnerId(user.getId());
         parentPage.setPageLayout(pageLayout);
         parentPage.setRegions(createEmptyRegionList(pageLayout.getNumberOfRegions()));
         parentPage.setSubPages(existingPages);
+        
+        Page expectedPage = new PageImpl();
+        expectedPage.setName(PAGE_NAME);
+        expectedPage.setOwnerId(user.getId());
+        expectedPage.setPageLayout(pageLayout);
+        expectedPage.setRegions(createEmptyRegionList(pageLayout.getNumberOfRegions()));
+        expectedPage.setPageType(PageType.SUB_PAGE.toString());
+        expectedPage.setParentPage(parentPage);
+        PageUser expectedPageUser = createMock(PageUser.class);
+        expect(expectedPageUser.getRenderSequence()).andReturn(EXPECTED_RENDER_SEQUENCE);
+        List<PageUser> pageUsers = Lists.newArrayList();
+        pageUsers.add(expectedPageUser);
+        expectedPage.setMembers(pageUsers);
 
         expect(userService.getAuthenticatedUser()).andReturn(user);
         expect(pageLayoutRepository.getByPageLayoutCode(PAGE_LAYOUT_CODE)).andReturn(pageLayout);
         expect(pageRepository.save(expectedPage)).andReturn(expectedPage);
-        replay(userService, pageLayoutRepository,  pageRepository);
+        replay(userService, pageLayoutRepository,  pageRepository, expectedPageUser);
 
         Page newPage = pageService.addNewSubPage(PAGE_NAME, PAGE_LAYOUT_CODE, parentPage);
         assertThat(newPage.getMembers().get(0).getRenderSequence(), is(EXPECTED_RENDER_SEQUENCE));
@@ -425,7 +439,7 @@ public class DefaultPageServiceTest {
         assertThat(newPage.getParentPage(), is(parentPage));
         assertTrue(parentPage.getSubPages().contains(newPage));
 
-        verify(userService, pageLayoutRepository,  pageRepository);
+        verify(userService, pageLayoutRepository,  pageRepository, expectedPageUser);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/rave/blob/b806acb8/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
----------------------------------------------------------------------
diff --git a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
index 87c8449..6fe4b0c 100644
--- a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
+++ b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
@@ -64,15 +64,24 @@ public class MongoDbRegionRepository implements RegionRepository {
         Page page;
         int index;
 
-        if(item.getId() == null) {
+        String itemId = item.getId();
+        if(itemId == null) {
             page = getPageFromRepository(item);
             page.getRegions().add(item);
             index = page.getRegions().size()-1;
         } else {
-            page = getPageByRegionId(item.getId());
+            page = getPageByRegionId(itemId);
             index = replaceRegion(page, item);
         }
-        Page saved = template.save(page);
+        // In case we found a subpage
+        Page parentPage = page.getParentPage();
+        Page saved;
+        if (parentPage != null) {
+            saved = template.save(parentPage);
+            saved = findSubpageByRegionId(itemId, saved);
+        } else {
+            saved = template.save(page);
+        }
         return saved.getRegions().get(index);
     }
 
@@ -158,7 +167,27 @@ public class MongoDbRegionRepository implements RegionRepository {
     }
 
     private Page getPageByRegionId(String  id) {
-        return template.findOne(new Query(Criteria.where("regions").elemMatch(Criteria.where("_id").is(id))));
+        Page page = template.findOne(new Query(Criteria.where("regions").elemMatch(Criteria.where("_id").is(id))));
+        if (page != null) {
+            return page;
+        }
+        // Try to find a subpage region
+        page = template.findOne(new Query(Criteria.where("subPages").elemMatch(Criteria.where("regions").elemMatch(Criteria.where("_id").is(id)))));
+        return findSubpageByRegionId(id, page);
+    }
+
+    private Page findSubpageByRegionId(String id, Page page) {
+        List<Page> subPages = page.getSubPages();
+        List<Region> regions;
+        for (Page subPage : subPages) {
+            regions = subPage.getRegions();
+            for (Region region : regions) {
+                if (id.equals(region.getId())) {
+                    return subPage;
+                }
+            }
+        }
+        return null;
     }