Author: mfranklin
Date: Mon Oct 15 18:28:57 2012
New Revision: 1398436
URL: http://svn.apache.org/viewvc?rev=1398436&view=rev
Log:
Filled out pagerepository implementation
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbPageUser.java
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbPageUser.java
URL:
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbPageUser.java?rev=1398436&r1=1398435&r2=1398436&view=diff
==============================================================================
---
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbPageUser.java
(original)
+++
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbPageUser.java
Mon Oct 15 18:28:57 2012
@@ -15,6 +15,10 @@ public class MongoDbPageUser extends Pag
this.userRepository = userRepository;
}
+ public MongoDbPageUser(User owner, Page lPage, long renderSequence) {
+ super(owner, lPage, renderSequence);
+ }
+
public Long getUserId() {
return userId;
}
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
URL:
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java?rev=1398436&r1=1398435&r2=1398436&view=diff
==============================================================================
---
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
(original)
+++
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
Mon Oct 15 18:28:57 2012
@@ -1,7 +1,12 @@
package org.apache.rave.portal.repository.impl;
+import com.google.common.collect.Lists;
import org.apache.rave.portal.model.*;
import org.apache.rave.portal.model.conversion.MongoDbConverter;
+import org.apache.rave.portal.model.impl.PageImpl;
+import org.apache.rave.portal.model.impl.PageUserImpl;
+import org.apache.rave.portal.model.impl.RegionImpl;
+import org.apache.rave.portal.model.impl.RegionWidgetImpl;
import org.apache.rave.portal.repository.PageRepository;
import org.apache.rave.util.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +14,7 @@ import org.springframework.data.mongodb.
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;
+import java.util.ArrayList;
import java.util.List;
import static org.springframework.data.mongodb.core.query.Criteria.where;
@@ -27,9 +33,7 @@ public class MongoDbPageRepository imple
@Override
public List<Page> getAllPages(Long userId, PageType pageType) {
List<MongoDbPage> pages = mongoTemplate.find(new
Query(where("pageType").is(pageType).andOperator(where("ownerId").is(userId))),
MongoDbPage.class);
- for(MongoDbPage page : pages) {
- converter.hydrate(page, Page.class);
- }
+ hydratePages(pages);
return CollectionUtils.<Page>toBaseTypedList(pages);
}
@@ -42,8 +46,7 @@ public class MongoDbPageRepository imple
@Override
public Page createPageForUser(User user, PageTemplate pt) {
- //TODO
- return null;
+ return save(convertTemplate(pt, user));
}
@Override
@@ -53,8 +56,13 @@ public class MongoDbPageRepository imple
@Override
public List<PageUser> getPagesForUser(Long userId, PageType pageType) {
- //TODO
- return null;
+ List<MongoDbPage> pages = mongoTemplate.find(new
Query(where("members").elemMatch(where("userId").is(userId)).andOperator(where("pageType").is(pageType))),
MongoDbPage.class);
+ List<PageUser> userList = Lists.newArrayList();
+ for(MongoDbPage page : pages) {
+ converter.hydrate(page, Page.class);
+ userList.add(findPageUser(userId, page));
+ }
+ return userList;
}
@Override
@@ -94,4 +102,120 @@ public class MongoDbPageRepository imple
public void delete(Page item) {
mongoTemplate.remove(new Query(where("id").is(item.getId())),
MongoDbPage.class);
}
+
+ private void hydratePages(List<MongoDbPage> pages) {
+ for(MongoDbPage page : pages) {
+ converter.hydrate(page, Page.class);
+ }
+ }
+
+ /**
+ * convertTemplate: PageTemplate, User -> Page
+ * Converts the PageTemplate for Person Profiles into a Person Profile Page
+ * @param pt PageTemplate
+ * @param user User
+ * @return Page
+ */
+ private Page convertTemplate(PageTemplate pt, User user) {
+ Page p = new PageImpl();
+ p.setName(pt.getName());
+ p.setPageType(pt.getPageType());
+ p.setOwner(user);
+ PageUser pageUser = new PageUserImpl(user, p, pt.getRenderSequence());
+ pageUser.setPageStatus(PageInvitationStatus.OWNER);
+ pageUser.setEditor(true);
+ List<PageUser> members = new ArrayList<PageUser>();
+ members.add(pageUser);
+ p.setMembers(members);
+
+ p.setPageLayout(pt.getPageLayout());
+ p.setRegions(convertRegions(pt.getPageTemplateRegions(), p));
+ p.setSubPages(convertPages(pt.getSubPageTemplates(), p));
+ return p;
+ }
+
+ /**
+ * convertRegions: List of PageTemplateRegion, Page -> List of Regions
+ * Converts the JpaRegion Templates of the Page Template to Regions for
the page
+ * @param pageTemplateRegions List of PageTemplateRegion
+ * @param page Page
+ * @return list of JpaRegion
+ */
+ private List<Region> convertRegions(List<PageTemplateRegion>
pageTemplateRegions, Page page){
+ List<Region> regions = new ArrayList<Region>();
+ for (PageTemplateRegion ptr : pageTemplateRegions){
+ Region region = new RegionImpl();
+ region.setRenderOrder((int) ptr.getRenderSequence());
+ region.setPage(page);
+ region.setLocked(ptr.isLocked());
+
region.setRegionWidgets(convertWidgets(ptr.getPageTemplateWidgets(), region));
+ regions.add(region);
+ }
+ return regions;
+ }
+
+ /**
+ * convertWidgets: List of PageTemplateWidget, JpaRegion -> List of
RegionWidget
+ * Converts the Page Template Widgets to RegionWidgets for the given
JpaRegion
+ * @param pageTemplateWidgets List of PageTemplateWidget
+ * @param region JpaRegion
+ * @return List of RegionWidget
+ */
+ private List<RegionWidget> convertWidgets(List<PageTemplateWidget>
pageTemplateWidgets, Region region){
+ List<RegionWidget> widgets = new ArrayList<RegionWidget>();
+ for (PageTemplateWidget ptw : pageTemplateWidgets){
+ RegionWidget regionWidget = new RegionWidgetImpl();
+ regionWidget.setRegion(region);
+ regionWidget.setCollapsed(false);
+ regionWidget.setLocked(ptw.isLocked());
+ regionWidget.setHideChrome(ptw.isHideChrome());
+ regionWidget.setRenderOrder((int) ptw.getRenderSeq());
+ regionWidget.setWidget(ptw.getWidget());
+ widgets.add(regionWidget);
+ }
+ return widgets;
+ }
+
+ /**
+ * convertPages: List of PageTemplate, Page -> List of Page
+ * Converts the template subpages in to a list of Pages for the given page
object
+ * This is a recursive function. A sub page could have a list of sub pages.
+ * @param pageTemplates List of PageTemplate
+ * @param page Page
+ * @return list of Page
+ */
+ private List<Page> convertPages(List<PageTemplate> pageTemplates, Page
page){
+ List<Page> pages = new ArrayList<Page>();
+ for(PageTemplate pt : pageTemplates){
+ Page lPage = new PageImpl();
+ lPage.setName(pt.getName());
+ lPage.setPageType(pt.getPageType());
+ lPage.setOwner(page.getOwner());
+ lPage.setPageLayout(pt.getPageLayout());
+ lPage.setParentPage(page);
+ lPage.setRegions(convertRegions(pt.getPageTemplateRegions(),
lPage));
+
+ // create new pageUser tuple
+ PageUser pageUser = new PageUserImpl(lPage.getOwner(), lPage,
pt.getRenderSequence());
+ pageUser.setPageStatus(PageInvitationStatus.OWNER);
+ pageUser.setEditor(true);
+ List<PageUser> members = new ArrayList<PageUser>();
+ members.add(pageUser);
+ lPage.setMembers(members);
+ // recursive call
+ lPage.setSubPages((pt.getSubPageTemplates() == null ||
pt.getSubPageTemplates().isEmpty()) ? null :
convertPages(pt.getSubPageTemplates(), lPage));
+ pages.add(lPage);
+ }
+ return pages;
+ }
+
+ private PageUser findPageUser(Long userId, MongoDbPage page) {
+ for(PageUser user : page.getMembers()) {
+ if(user.getId().equals(userId)) {
+ return user;
+ }
+ }
+ return null;
+ }
+
}