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/02/18 19:58:11 UTC
svn commit: r1569475 - in /rave/trunk/rave-components:
rave-core/src/main/java/org/apache/rave/portal/service/impl/
rave-core/src/test/java/org/apache/rave/portal/service/impl/
rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/
Author: mfranklin
Date: Tue Feb 18 18:58:10 2014
New Revision: 1569475
URL: http://svn.apache.org/r1569475
Log:
Applying patch from Stanton Sievers for RAVE-1086
Modified:
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
Modified: rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java?rev=1569475&r1=1569474&r2=1569475&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java (original)
+++ rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/service/impl/DefaultPageService.java Tue Feb 18 18:58:10 2014
@@ -40,6 +40,8 @@ import org.springframework.beans.factory
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 implemen
@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 implemen
// 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 implemen
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 implemen
// 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());
+ }
+ }
+ }
}
Modified: rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java?rev=1569475&r1=1569474&r2=1569475&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java (original)
+++ rave/trunk/rave-components/rave-core/src/test/java/org/apache/rave/portal/service/impl/DefaultPageServiceTest.java Tue Feb 18 18:58:10 2014
@@ -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
Modified: rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java?rev=1569475&r1=1569474&r2=1569475&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java (original)
+++ rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java Tue Feb 18 18:58:10 2014
@@ -64,15 +64,24 @@ public class MongoDbRegionRepository imp
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 imp
}
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;
}