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());
- }
}