Author: mfranklin
Date: Tue Oct 16 12:50:02 2012
New Revision: 1398764

URL: http://svn.apache.org/viewvc?rev=1398764&view=rev
Log:
Refactored common repository code into template

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingConverterFactory.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbConverter.java
      - copied, changed from r1398585, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
      - copied, changed from r1398585, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbUserConverter.java
      - copied, changed from r1398620, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbUserConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
      - copied, changed from r1398602, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbWidgetConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoPageOperations.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
Removed:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbUserConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbWidgetConverter.java
Modified:
    rave/branches/mongo/rave-components/rave-mongodb/pom.xml
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageTemplateRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java

Modified: rave/branches/mongo/rave-components/rave-mongodb/pom.xml
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/pom.xml?rev=1398764&r1=1398763&r2=1398764&view=diff
==============================================================================
--- rave/branches/mongo/rave-components/rave-mongodb/pom.xml (original)
+++ rave/branches/mongo/rave-components/rave-mongodb/pom.xml Tue Oct 16 
12:50:02 2012
@@ -72,6 +72,35 @@
             <groupId>org.freemarker</groupId>
             <artifactId>freemarker</artifactId>
         </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.ibm.icu</groupId>
+            <artifactId>icu4j</artifactId>
+            <scope>provided</scope>
+        </dependency>
+
     </dependencies>
 
 </project>

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingConverterFactory.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingConverterFactory.java?rev=1398764&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingConverterFactory.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingConverterFactory.java
 Tue Oct 16 12:50:02 2012
@@ -0,0 +1,21 @@
+package org.apache.rave.portal.model.conversion;
+
+import org.apache.rave.model.ModelConverter;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: mfranklin
+ * Date: 10/16/12
+ * Time: 8:24 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public interface HydratingConverterFactory {
+    @SuppressWarnings("unchecked")
+    <S, T> T convert(S source, Class<S> clazz);
+
+    @SuppressWarnings("unchecked")
+    <S> void hydrate(S source, Class<S> clazz);
+
+    @SuppressWarnings("unchecked")
+    <S,T> ModelConverter<S, T> getConverter(Class<S> clazz);
+}

Copied: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbConverter.java
 (from r1398585, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java)
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbConverter.java?p2=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbConverter.java&p1=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java&r1=1398585&r2=1398764&rev=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbConverter.java
 Tue Oct 16 12:50:02 2012
@@ -17,9 +17,11 @@
  *  under the License.
  */
 
-package org.apache.rave.portal.model.conversion;
+package org.apache.rave.portal.model.conversion.impl;
 
 import org.apache.rave.model.ModelConverter;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
+import org.apache.rave.portal.model.conversion.HydratingModelConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -33,7 +35,7 @@ import java.util.Map;
  * TODO: REMOVE REPOSITORY INJECTION WHEN MODEL-SPLIT BRANCH IS MERGED
  */
 @Component
-public class MongoDbConverter {
+public class MongoDbConverter implements HydratingConverterFactory {
 
     private Map<Class<?>, HydratingModelConverter> converterMap;
 
@@ -45,6 +47,7 @@ public class MongoDbConverter {
         }
     }
 
+    @Override
     @SuppressWarnings("unchecked")
     public <S, T> T convert(S source, Class<S> clazz) {
         if(converterMap.containsKey(clazz)) {
@@ -54,6 +57,7 @@ public class MongoDbConverter {
         }
     }
 
+    @Override
     @SuppressWarnings("unchecked")
     public <S> void hydrate(S source, Class<S> clazz) {
         if(converterMap.containsKey(clazz)) {
@@ -63,6 +67,7 @@ public class MongoDbConverter {
         }
     }
 
+    @Override
     @SuppressWarnings("unchecked")
     public <S,T> ModelConverter<S, T> getConverter(Class<S> clazz) {
         return converterMap.get(clazz);

Copied: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
 (from r1398585, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java)
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java?p2=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java&p1=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java&r1=1398585&r2=1398764&rev=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageConverter.java
 Tue Oct 16 12:50:02 2012
@@ -17,10 +17,11 @@
  *  under the License.
  */
 
-package org.apache.rave.portal.model.conversion;
+package org.apache.rave.portal.model.conversion.impl;
 
 import com.google.common.collect.Lists;
 import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.conversion.HydratingModelConverter;
 import org.apache.rave.portal.repository.PageLayoutRepository;
 import org.apache.rave.portal.repository.UserRepository;
 import org.apache.rave.portal.repository.WidgetRepository;

Copied: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbUserConverter.java
 (from r1398620, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbUserConverter.java)
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbUserConverter.java?p2=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbUserConverter.java&p1=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbUserConverter.java&r1=1398620&r2=1398764&rev=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbUserConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbUserConverter.java
 Tue Oct 16 12:50:02 2012
@@ -17,11 +17,12 @@
  *  under the License.
  */
 
-package org.apache.rave.portal.model.conversion;
+package org.apache.rave.portal.model.conversion.impl;
 
 import com.google.common.collect.Lists;
 import org.apache.rave.portal.model.MongoDbUser;
 import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.conversion.HydratingModelConverter;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.stereotype.Component;
 

Copied: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
 (from r1398602, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbWidgetConverter.java)
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java?p2=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java&p1=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbWidgetConverter.java&r1=1398602&r2=1398764&rev=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbWidgetConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbWidgetConverter.java
 Tue Oct 16 12:50:02 2012
@@ -17,10 +17,11 @@
  *  under the License.
  */
 
-package org.apache.rave.portal.model.conversion;
+package org.apache.rave.portal.model.conversion.impl;
 
 import com.google.common.collect.Lists;
 import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.conversion.HydratingModelConverter;
 import org.apache.rave.portal.repository.CategoryRepository;
 import org.apache.rave.portal.repository.UserRepository;
 import org.springframework.beans.factory.annotation.Autowired;

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoPageOperations.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoPageOperations.java?rev=1398764&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoPageOperations.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoPageOperations.java
 Tue Oct 16 12:50:02 2012
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.rave.portal.repository;
+
+import org.apache.rave.portal.model.Page;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.List;
+
+/**
+ */
+public interface MongoPageOperations {
+
+    long count(Query query);
+    void remove(Query query);
+    Page findOne(Query query);
+    List<Page> find(Query query);
+    Page get(long id);
+    Page save(Page item);
+}

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=1398764&r1=1398763&r2=1398764&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
 Tue Oct 16 12:50:02 2012
@@ -21,15 +21,12 @@ package org.apache.rave.portal.repositor
 
 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;
-import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Repository;
 
@@ -43,26 +40,19 @@ import static org.springframework.data.m
 @Repository
 public class MongoDbPageRepository implements PageRepository {
 
-    public static final String COLLECTION = "page";
-
-    @Autowired
-    private MongoOperations mongoTemplate;
-
     @Autowired
-    private MongoDbConverter converter;
+    private MongoPageTemplate template;
 
     @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, COLLECTION);
-        hydratePages(pages);
-        return CollectionUtils.<Page>toBaseTypedList(pages);
+        return template.find(new 
Query(where("pageType").is(pageType).andOperator(where("ownerId").is(userId))));
     }
 
     @Override
     public int deletePages(Long userId, PageType pageType) {
         Query query = new 
Query(where("pageType").is(pageType).andOperator(where("ownerId").is(userId)));
-        int count = (int)mongoTemplate.count(query, COLLECTION);
-        mongoTemplate.remove(query, COLLECTION);
+        int count = (int)template.count(query);
+        template.remove(query);
         return count;
     }
 
@@ -73,15 +63,14 @@ public class MongoDbPageRepository imple
 
     @Override
     public boolean hasPersonPage(long userId) {
-        return mongoTemplate.count(new 
Query(where("pageType").is(PageType.PERSON_PROFILE).andOperator(where("ownerId").is(userId))),
 COLLECTION) > 0;
+        return template.count(new 
Query(where("pageType").is(PageType.PERSON_PROFILE).andOperator(where("ownerId").is(userId))))
 > 0;
     }
 
     @Override
     public List<PageUser> getPagesForUser(Long userId, PageType pageType) {
-        List<MongoDbPage> pages = mongoTemplate.find(new 
Query(where("members").elemMatch(where("userId").is(userId)).andOperator(where("pageType").is(pageType))),
 MongoDbPage.class, COLLECTION);
+        List<Page> pages = template.find(new 
Query(where("members").elemMatch(where("userId").is(userId)).andOperator(where("pageType").is(pageType))));
         List<PageUser> userList = Lists.newArrayList();
-        for(MongoDbPage page : pages) {
-            converter.hydrate(page, Page.class);
+        for(Page page : pages) {
             userList.add(findPageUser(userId, page));
         }
         return userList;
@@ -104,31 +93,17 @@ public class MongoDbPageRepository imple
 
     @Override
     public Page get(long id) {
-        MongoDbPage fromDb = mongoTemplate.findById(id, MongoDbPage.class, 
COLLECTION);
-        if(fromDb == null) {
-            throw new IllegalStateException("Could not find requested page: " 
+ id);
-        }
-        converter.hydrate(fromDb, Page.class);
-        return fromDb;
+        return template.get(id);
     }
 
     @Override
     public Page save(Page item) {
-        MongoDbPage converted = converter.convert(item, Page.class);
-        mongoTemplate.save(converted, COLLECTION);
-        converter.hydrate(converted, Page.class);
-        return converted;
+        return template.save(item);
     }
 
     @Override
     public void delete(Page item) {
-        mongoTemplate.remove(new Query(where("id").is(item.getId())), 
COLLECTION);
-    }
-
-    private void hydratePages(List<MongoDbPage> pages) {
-        for(MongoDbPage page : pages) {
-            converter.hydrate(page, Page.class);
-        }
+        template.remove(new Query(where("id").is(item.getId())));
     }
 
     /**
@@ -231,7 +206,7 @@ public class MongoDbPageRepository imple
         return pages;
     }
 
-    private PageUser findPageUser(Long userId, MongoDbPage page) {
+    private PageUser findPageUser(Long userId, Page page) {
         for(PageUser user : page.getMembers()) {
             if(user.getId().equals(userId)) {
                 return user;

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageTemplateRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageTemplateRepository.java?rev=1398764&r1=1398763&r2=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageTemplateRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageTemplateRepository.java
 Tue Oct 16 12:50:02 2012
@@ -21,7 +21,7 @@ package org.apache.rave.portal.repositor
 
 import org.apache.rave.portal.model.PageTemplate;
 import org.apache.rave.portal.model.PageType;
-import org.apache.rave.portal.model.conversion.MongoDbConverter;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
 import org.apache.rave.portal.model.impl.PageTemplateImpl;
 import org.apache.rave.portal.repository.PageTemplateRepository;
 import org.apache.rave.util.CollectionUtils;
@@ -39,7 +39,7 @@ public class MongoDbPageTemplateReposito
     public static final String COLLECTION = "pageTemplate";
 
     @Autowired
-    private MongoDbConverter converter;
+    private HydratingConverterFactory converter;
 
     @Autowired
     private MongoOperations template;

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java?rev=1398764&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionRepository.java
 Tue Oct 16 12:50:02 2012
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.rave.portal.repository.impl;
+
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.Region;
+import org.apache.rave.portal.model.impl.RegionImpl;
+import org.apache.rave.portal.repository.MongoPageOperations;
+import org.apache.rave.portal.repository.RegionRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ */
+@Repository
+public class MongoDbRegionRepository implements RegionRepository {
+
+    @Autowired
+    private MongoPageOperations template;
+
+
+    @Override
+    public Class<? extends Region> getType() {
+        return RegionImpl.class;
+    }
+
+    @Override
+    public Region get(long id) {
+        Page page = getPageByRegionId(id);
+        for(Region region : page.getRegions()) {
+            if(region.getId().equals(id)) {
+                return region;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Region save(Region item) {
+        Page page;
+        int index;
+
+        if(item.getId() == null) {
+            page = getPageFromRepository(item);
+            page.getRegions().add(item);
+            index = page.getRegions().size()-1;
+        } else {
+            page = getPageByRegionId(item.getId());
+            index = replaceRegion(page, item);
+        }
+        Page saved = template.save(page);
+        return saved.getRegions().get(index);
+    }
+
+    @Override
+    public void delete(Region item) {
+        Page page;
+
+        if(item.getId() == null) {
+            throw new IllegalStateException("Unidentifiable region (null id)");
+        } else {
+            page = getPageByRegionId(item.getId());
+            removeRegion(page, item);
+        }
+        template.save(page);
+    }
+
+    private void removeRegion(Page page, Region item) {
+        Iterator<Region> iterator = page.getRegions().iterator();
+        while(iterator.hasNext()) {
+            Region region = iterator.next();
+            if(region.getId().equals(item.getId())) {
+                iterator.remove();
+                return;
+            }
+        }
+    }
+
+    private int replaceRegion(Page page, Region item) {
+        List<Region> regions = page.getRegions();
+        for(int i=0; i < regions.size(); i++) {
+            if(regions.get(i).getId().equals(item.getId())) {
+                regions.remove(i);
+                regions.add(i, item);
+                return i;
+            }
+        }
+        return 0;
+    }
+
+    private Page getPageFromRepository(Region item) {
+        if(item.getPage() != null && item.getPage().getId() != null) {
+            return template.get(item.getPage().getId());
+        }
+        else {
+            throw new IllegalStateException("Unable to find page for region");
+        }
+    }
+
+    private Page getPageByRegionId(long id) {
+        return template.findOne(new 
Query(Criteria.where("regions").elemMatch(Criteria.where("_id").is(id))));
+    }
+}

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java?rev=1398764&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbRegionWidgetRepository.java
 Tue Oct 16 12:50:02 2012
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.rave.portal.repository.impl;
+
+import org.apache.rave.portal.model.MongoDbRegionWidget;
+import org.apache.rave.portal.model.RegionWidget;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
+import org.apache.rave.portal.repository.PageRepository;
+import org.apache.rave.portal.repository.RegionWidgetRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+
+/**
+
+ */
+public class MongoDbRegionWidgetRepository implements RegionWidgetRepository {
+
+    @Autowired
+    private MongoOperations template;
+
+    @Autowired
+    private PageRepository pageRepository;
+
+    @Autowired
+    private HydratingConverterFactory converter;
+
+    @Override
+    public Class<? extends RegionWidget> getType() {
+        return MongoDbRegionWidget.class;
+    }
+
+    @Override
+    public RegionWidget get(long id) {
+        return null;
+    }
+
+    @Override
+    public RegionWidget save(RegionWidget item) {
+        return null;
+    }
+
+    @Override
+    public void delete(RegionWidget item) {
+        //To change body of implemented methods use File | Settings | File 
Templates.
+    }
+}

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java?rev=1398764&r1=1398763&r2=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
 Tue Oct 16 12:50:02 2012
@@ -21,7 +21,7 @@ package org.apache.rave.portal.repositor
 
 import org.apache.rave.portal.model.MongoDbUser;
 import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.conversion.MongoDbConverter;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
 import org.apache.rave.portal.repository.UserRepository;
 import org.apache.rave.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,7 +47,7 @@ public class MongoDbUserRepository imple
     private MongoOperations template;
 
     @Autowired
-    private MongoDbConverter converter;
+    private HydratingConverterFactory converter;
 
     @Override
     public User getByUsername(String username) {

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java?rev=1398764&r1=1398763&r2=1398764&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java
 Tue Oct 16 12:50:02 2012
@@ -20,7 +20,7 @@
 package org.apache.rave.portal.repository.impl;
 
 import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.model.conversion.MongoDbConverter;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
 import org.apache.rave.portal.model.util.WidgetStatistics;
 import org.apache.rave.portal.repository.WidgetRepository;
 import org.apache.rave.util.CollectionUtils;
@@ -47,7 +47,7 @@ public class MongoDbWidgetRepository imp
     private MongoOperations template;
 
     @Autowired
-    private MongoDbConverter converter;
+    private HydratingConverterFactory converter;
 
     @Override
     public List<Widget> getAll() {

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java?rev=1398764&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
 Tue Oct 16 12:50:02 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.rave.portal.repository.impl;
+
+import org.apache.rave.portal.model.MongoDbPage;
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
+import org.apache.rave.portal.repository.MongoPageOperations;
+import org.apache.rave.util.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.List;
+
+/**
+ */
+public class MongoPageTemplate implements MongoPageOperations {
+    public static final String COLLECTION = "page";
+    public static final Class<MongoDbPage> CLASS = MongoDbPage.class;
+
+    @Autowired
+    private MongoOperations mongoTemplate;
+
+    @Autowired
+    private HydratingConverterFactory converter;
+
+    @Override
+    public long count(Query query) {
+        return mongoTemplate.count(query, COLLECTION);
+    }
+
+    @Override
+    public void remove(Query query) {
+        mongoTemplate.remove(query, COLLECTION);
+    }
+
+    @Override
+    public Page get(long id) {
+        MongoDbPage fromDb = mongoTemplate.findById(id, CLASS, COLLECTION);
+        if(fromDb == null) {
+            throw new IllegalStateException("Could not find requested page: " 
+ id);
+        }
+        return hydrate(fromDb);
+    }
+
+    @Override
+    public Page save(Page item) {
+        MongoDbPage converted = converter.convert(item, Page.class);
+        mongoTemplate.save(converted, COLLECTION);
+        converter.hydrate(converted, Page.class);
+        return converted;
+    }
+
+    @Override
+    public Page findOne(Query query) {
+        return hydrate(mongoTemplate.findOne(query, CLASS, COLLECTION));
+    }
+
+    @Override
+    public List<Page> find(Query query) {
+        return hydrate(mongoTemplate.find(query, CLASS, COLLECTION));
+    }
+
+    private List<Page> hydrate(List<MongoDbPage> mongoDbPages) {
+        for(MongoDbPage p : mongoDbPages) {
+            hydrate(p);
+        }
+        return CollectionUtils.<Page>toBaseTypedList(mongoDbPages);
+    }
+
+    private Page hydrate(MongoDbPage page) {
+        converter.hydrate(page, Page.class);
+        return page;
+    }
+}


Reply via email to