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;
+    }
+
 }


Reply via email to