Updated mongo to support sub page retrieval git-svn-id: https://svn.apache.org/repos/asf/rave/trunk@1558835 13f79535-47bb-0310-9956-ffa450edef68
Project: http://git-wip-us.apache.org/repos/asf/rave/repo Commit: http://git-wip-us.apache.org/repos/asf/rave/commit/9e5650f2 Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/9e5650f2 Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/9e5650f2 Branch: refs/heads/angular Commit: 9e5650f225e9749d402d5712ee6df467b0c6b7d7 Parents: bd5d3af Author: Matthew B. Franklin <[email protected]> Authored: Thu Jan 16 15:33:03 2014 +0000 Committer: Matthew B. Franklin <[email protected]> Committed: Thu Jan 16 15:33:03 2014 +0000 ---------------------------------------------------------------------- .../portal/model/util/MongoDbModelUtil.java | 2 + .../repository/impl/MongoDbPageRepository.java | 69 +++++++++++++++----- 2 files changed, 55 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/rave/blob/9e5650f2/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java index c31cff2..3875743 100644 --- a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java +++ b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java @@ -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("-", "_"); } http://git-wip-us.apache.org/repos/asf/rave/blob/9e5650f2/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java ---------------------------------------------------------------------- diff --git a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java index 063699d..c251093 100644 --- a/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java +++ b/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java @@ -26,6 +26,7 @@ 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.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 implements PageRepository { 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 implements PageRepository { 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 implements PageRepository { 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 implements PageRepository { 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()); - } }
