Author: mfranklin
Date: Thu Jan 16 15:33:03 2014
New Revision: 1558835

URL: http://svn.apache.org/r1558835
Log:
Updated mongo to support sub page retrieval

Modified:
    
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
    
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java

Modified: 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java?rev=1558835&r1=1558834&r2=1558835&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
 (original)
+++ 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
 Thu Jan 16 15:33:03 2014
@@ -29,6 +29,8 @@ public class MongoDbModelUtil {
 
     private MongoDbModelUtil(){}
 
+    public static final int MAX_TREE_DEPTH = 4;
+
     public static String generateId() {
         return UUID.randomUUID().toString().replace("-", "_");
     }

Modified: 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java?rev=1558835&r1=1558834&r2=1558835&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
 (original)
+++ 
rave/trunk/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
 Thu Jan 16 15:33:03 2014
@@ -26,6 +26,7 @@ import org.apache.rave.portal.model.impl
 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.model.util.MongoDbModelUtil;
 import org.apache.rave.portal.repository.MongoPageOperations;
 import org.apache.rave.portal.repository.PageRepository;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -107,13 +108,25 @@ public class MongoDbPageRepository imple
         return MongoDbPage.class;
     }
 
+    //TODO Change persisted page structure to normalize sub pages
     @Override
     public Page get(String  id) {
-        return template.get(id);
+        Page page = template.get(id);
+        //We have to account for sub pages
+        if(page == null) {
+            page = template.findOne(query(new 
Criteria().orOperator(addSubPageQuery(id))));
+            if(page != null) {
+                page = findSubPage(page, id);
+            }
+        }
+        return page;
     }
 
     @Override
     public Page save(Page item) {
+        while(item.getParentPage() != null) {
+            item = item.getParentPage();
+        }
         return template.save(item);
     }
 
@@ -122,6 +135,21 @@ public class MongoDbPageRepository imple
         template.remove(query(where("_id").is(item.getId())));
     }
 
+    @Override
+    public List<Page> getAll() {
+        return template.find(new Query());
+    }
+
+    @Override
+    public List<Page> getLimitedList(int offset, int pageSize) {
+        return template.find(new Query().skip(offset).limit(pageSize));
+    }
+
+    @Override
+    public int getCountAll() {
+        return (int) template.count(new Query());
+    }
+
     private List<Page> sort(List<Page> pages, final String  userId) {
         Collections.sort(pages, new Comparator<Page>() {
             @Override
@@ -155,6 +183,30 @@ public class MongoDbPageRepository imple
         return -1;
     }
 
+    private Page findSubPage(Page page, String id) {
+        if(page.getSubPages() != null) {
+            for(Page subPage : page.getSubPages()) {
+                if(subPage.getId().equals(id)) {
+                    return subPage;
+                }
+                Page found = findSubPage(subPage, id);
+                if(found != null) {
+                    return found;
+                }
+            }
+        }
+        return null;
+    }
+
+    private Criteria[] addSubPageQuery(String id) {
+       //TODO Dynamically create the criteria in a loop with a max-depth
+       return new Criteria[] {
+            where("subPages").elemMatch(where("_id").is(id)),
+            
where("subPages").elemMatch(where("subPages").elemMatch(where("_id").is(id))),
+            
where("subPages").elemMatch(where("subPages").elemMatch(where("subPages").elemMatch(where("_id").is(id))))
+       };
+    }
+
     /**
      * convertTemplate: PageTemplate, User -> Page
      * Converts the PageTemplate for Person Profiles into a Person Profile Page
@@ -276,19 +328,4 @@ public class MongoDbPageRepository imple
         this.template = template;
     }
 
-
-    @Override
-    public List<Page> getAll() {
-        return template.find(new Query());
-    }
-
-    @Override
-    public List<Page> getLimitedList(int offset, int pageSize) {
-        return template.find(new Query().skip(offset).limit(pageSize));
-    }
-
-    @Override
-    public int getCountAll() {
-        return (int) template.count(new Query());
-    }
 }


Reply via email to