Author: mfranklin
Date: Mon Oct 15 17:18:40 2012
New Revision: 1398398

URL: http://svn.apache.org/viewvc?rev=1398398&view=rev
Log:
Modularized conversion process

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingModelConverter.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
      - copied, changed from r1398368, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbReferenceConverter.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/util/
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
Removed:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbReferenceConverter.java
Modified:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageRepository.java

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingModelConverter.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingModelConverter.java?rev=1398398&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingModelConverter.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/HydratingModelConverter.java
 Mon Oct 15 17:18:40 2012
@@ -0,0 +1,8 @@
+package org.apache.rave.portal.model.conversion;
+
+
+import org.apache.rave.model.ModelConverter;
+
+public interface HydratingModelConverter <S,T>  extends ModelConverter<S, T>{
+    public void hydrate(T dehydrated);
+}

Copied: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
 (from r1398368, 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbReferenceConverter.java)
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java?p2=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java&p1=rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbReferenceConverter.java&r1=1398368&r2=1398398&rev=1398398&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbReferenceConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbConverter.java
 Mon Oct 15 17:18:40 2012
@@ -1,15 +1,12 @@
 package org.apache.rave.portal.model.conversion;
 
-import com.google.common.collect.Lists;
-import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.repository.PageLayoutRepository;
-import org.apache.rave.portal.repository.UserRepository;
-import org.apache.rave.portal.repository.WidgetRepository;
+import org.apache.rave.model.ModelConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
-import java.util.Random;
+import java.util.Map;
 
 /**
  * Converts reference properties to hydrated objects
@@ -17,123 +14,39 @@ import java.util.Random;
  * TODO: REMOVE REPOSITORY INJECTION WHEN MODEL-SPLIT BRANCH IS MERGED
  */
 @Component
-public class MongoDbReferenceConverter {
+public class MongoDbConverter {
 
-    @Autowired
-    private UserRepository userRepository;
-
-    @Autowired
-    private WidgetRepository widgetRepository;
+    Map<Class<?>, HydratingModelConverter> converterMap;
 
     @Autowired
-    private PageLayoutRepository pageLayoutRepository;
-
-
-    public void hydrate(MongoDbPage page) {
-        page.setPageLayoutRepository(pageLayoutRepository);
-        page.setUserRepository(userRepository);
-
-        for (PageUser user : page.getMembers()) {
-            user.setPage(page);
-            if (user instanceof MongoDbPageUser) {
-                hydrate((MongoDbPageUser) user);
-            }
-        }
-        for (Region region : page.getRegions()) {
-            region.setPage(page);
-            manipulateRegion(region, true);
-        }
-        if (page.getSubPages() != null) {
-            for (Page subPage : page.getSubPages()) {
-                subPage.setParentPage(page);
-                if (subPage instanceof MongoDbPage) {
-                    hydrate((MongoDbPage) subPage);
-                }
-            }
+    MongoDbConverter(List<HydratingModelConverter> converters) {
+        converterMap = new HashMap<Class<?>, HydratingModelConverter>();
+        for(HydratingModelConverter converter : converters) {
+            converterMap.put(converter.getSourceType(), converter);
         }
     }
 
-    public MongoDbPage convert(Page sourcePage) {
-        MongoDbPage page = sourcePage instanceof MongoDbPage ? (MongoDbPage) 
sourcePage : new MongoDbPage();
-        page.setId(page.getId() == null ? generateId() : sourcePage.getId());
-        page.setOwnerId(sourcePage.getOwner().getId());
-        page.setPageLayoutCode(sourcePage.getPageLayout().getCode());
-        page.setName(sourcePage.getName());
-        page.setRegions(sourcePage.getRegions());
-
-        page.setOwner(null);
-        page.setPageLayout(null);
-        page.setParentPage(null);
-        page.setPageLayoutRepository(null);
-        page.setUserRepository(null);
-
-        for (PageUser user : sourcePage.getMembers()) {
-            List<PageUser> convertedMembers = Lists.newLinkedList();
-            convertedMembers.add(convert(user));
-            page.setMembers(convertedMembers);
-        }
-        //No need to convert regions to anything special at this time
-        for (Region region : page.getRegions()) {
-            if (region.getId() == null) {
-                region.setId(generateId());
-            }
-            region.setPage(null);
-            manipulateRegion(region, false);
-        }
-        if (page.getSubPages() != null) {
-            for (Page subPage : sourcePage.getSubPages()) {
-                List<Page> convertedPages = Lists.newArrayList();
-                convertedPages.add(convert(subPage));
-                page.setSubPages(convertedPages);
-            }
+    @SuppressWarnings("unchecked")
+    public <S, T> T convert(S source, Class<S> clazz) {
+        if(converterMap.containsKey(clazz)) {
+            return (T)converterMap.get(clazz).convert(source);
+        } else {
+            throw new IllegalArgumentException("No ModelConverter found for 
type " + clazz);
         }
-        return page;
     }
 
-    public void hydrate(MongoDbPageUser user) {
-        user.setUserRepository(userRepository);
-    }
-
-    public MongoDbPageUser convert(PageUser sourceUser) {
-        MongoDbPageUser user = sourceUser instanceof MongoDbPageUser ? 
(MongoDbPageUser) sourceUser : new MongoDbPageUser();
-        user.setId(sourceUser.getId() == null ? generateId() : 
sourceUser.getId());
-        user.setUserId(sourceUser.getUser().getId());
-        user.setPage(null);
-        user.setUser(null);
-        user.setUserRepository(null);
-        return user;
-    }
-
-    public void hydrate(MongoDbRegionWidget widget, Region region) {
-        widget.setRegion(region);
-        widget.setWidgetRepository(widgetRepository);
-    }
-
-    public MongoDbRegionWidget convert(RegionWidget sourceRegionWidget) {
-        MongoDbRegionWidget regionWidget = sourceRegionWidget instanceof 
MongoDbRegionWidget ? (MongoDbRegionWidget) sourceRegionWidget : new 
MongoDbRegionWidget();
-        regionWidget.setId(sourceRegionWidget.getId() == null ? generateId() : 
sourceRegionWidget.getId());
-        regionWidget.setWidgetId(sourceRegionWidget.getWidget().getId());
-        regionWidget.setWidget(null);
-        regionWidget.setWidgetRepository(null);
-        regionWidget.setPreferences(sourceRegionWidget.getPreferences());
-        for (RegionWidgetPreference preference : 
regionWidget.getPreferences()) {
-            preference.setRegionWidgetId(regionWidget.getId());
+    @SuppressWarnings("unchecked")
+    public <S> void hydrate(S source, Class<S> clazz) {
+        if(converterMap.containsKey(clazz)) {
+            converterMap.get(clazz).hydrate(source);
+        } else {
+            throw new IllegalArgumentException("No ModelConverter found for 
type " + clazz);
         }
-        return regionWidget;
     }
 
-    private void manipulateRegion(Region region, Boolean hydrate) {
-        for (RegionWidget regionWidget : region.getRegionWidgets()) {
-            if (hydrate) {
-                hydrate((MongoDbRegionWidget) regionWidget, region);
-            } else {
-                region.getRegionWidgets().remove(regionWidget);
-                region.getRegionWidgets().add(convert(regionWidget));
-            }
-        }
+    @SuppressWarnings("unchecked")
+    public <S,T> ModelConverter<S, T> getConverter(Class<S> clazz) {
+        return converterMap.get(clazz);
     }
 
-    private long generateId() {
-        return new Random().nextLong();
-    }
 }

Added: 
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/MongoDbPageConverter.java?rev=1398398&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/MongoDbPageConverter.java
 Mon Oct 15 17:18:40 2012
@@ -0,0 +1,140 @@
+package org.apache.rave.portal.model.conversion;
+
+import com.google.common.collect.Lists;
+import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.repository.PageLayoutRepository;
+import org.apache.rave.portal.repository.UserRepository;
+import org.apache.rave.portal.repository.WidgetRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+import static org.apache.rave.portal.model.util.MongoDbModelUtil.generateId;
+
+@Component
+public class MongoDbPageConverter implements HydratingModelConverter<Page, 
MongoDbPage> {
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private WidgetRepository widgetRepository;
+
+    @Autowired
+    private PageLayoutRepository pageLayoutRepository;
+
+    @Override
+    public Class<Page> getSourceType() {
+        return Page.class;
+    }
+
+    @Override
+    public MongoDbPage convert(Page sourcePage) {
+        MongoDbPage page = sourcePage instanceof MongoDbPage ? (MongoDbPage) 
sourcePage : new MongoDbPage();
+        page.setId(page.getId() == null ? generateId() : sourcePage.getId());
+        page.setOwnerId(sourcePage.getOwner().getId());
+        page.setPageLayoutCode(sourcePage.getPageLayout().getCode());
+        page.setName(sourcePage.getName());
+        page.setRegions(sourcePage.getRegions());
+
+        page.setOwner(null);
+        page.setPageLayout(null);
+        page.setParentPage(null);
+        page.setPageLayoutRepository(null);
+        page.setUserRepository(null);
+
+        for (PageUser user : sourcePage.getMembers()) {
+            List<PageUser> convertedMembers = Lists.newLinkedList();
+            convertedMembers.add(convert(user));
+            page.setMembers(convertedMembers);
+        }
+        //No need to convert regions to anything special at this time
+        for (Region region : page.getRegions()) {
+            if (region.getId() == null) {
+                region.setId(generateId());
+            }
+            region.setPage(null);
+            manipulateRegion(region, false);
+        }
+        if (page.getSubPages() != null) {
+            for (Page subPage : sourcePage.getSubPages()) {
+                List<Page> convertedPages = Lists.newArrayList();
+                convertedPages.add(convert(subPage));
+                page.setSubPages(convertedPages);
+            }
+        }
+        return page;
+    }
+
+    public MongoDbPageUser convert(PageUser sourceUser) {
+        MongoDbPageUser user = sourceUser instanceof MongoDbPageUser ? 
(MongoDbPageUser) sourceUser : new MongoDbPageUser();
+        user.setId(sourceUser.getId() == null ? generateId() : 
sourceUser.getId());
+        user.setUserId(sourceUser.getUser().getId());
+        user.setPage(null);
+        user.setUser(null);
+        user.setUserRepository(null);
+        return user;
+    }
+
+    @Override
+    public void hydrate(MongoDbPage page) {
+        page.setPageLayoutRepository(pageLayoutRepository);
+        page.setUserRepository(userRepository);
+
+        for (PageUser user : page.getMembers()) {
+            user.setPage(page);
+            if (user instanceof MongoDbPageUser) {
+                hydrate((MongoDbPageUser) user);
+            }
+        }
+        for (Region region : page.getRegions()) {
+            region.setPage(page);
+            manipulateRegion(region, true);
+        }
+        if (page.getSubPages() != null) {
+            for (Page subPage : page.getSubPages()) {
+                subPage.setParentPage(page);
+                if (subPage instanceof MongoDbPage) {
+                    hydrate((MongoDbPage) subPage);
+                }
+            }
+        }
+    }
+
+
+    public void hydrate(MongoDbPageUser user) {
+        user.setUserRepository(userRepository);
+    }
+
+    public void hydrate(MongoDbRegionWidget widget, Region region) {
+        widget.setRegion(region);
+        widget.setWidgetRepository(widgetRepository);
+    }
+
+    public MongoDbRegionWidget convert(RegionWidget sourceRegionWidget) {
+        MongoDbRegionWidget regionWidget = sourceRegionWidget instanceof 
MongoDbRegionWidget ? (MongoDbRegionWidget) sourceRegionWidget : new 
MongoDbRegionWidget();
+        regionWidget.setId(sourceRegionWidget.getId() == null ? generateId() : 
sourceRegionWidget.getId());
+        regionWidget.setWidgetId(sourceRegionWidget.getWidget().getId());
+        regionWidget.setWidget(null);
+        regionWidget.setWidgetRepository(null);
+        regionWidget.setPreferences(sourceRegionWidget.getPreferences());
+        for (RegionWidgetPreference preference : 
regionWidget.getPreferences()) {
+            preference.setRegionWidgetId(regionWidget.getId());
+        }
+        return regionWidget;
+    }
+
+    private void manipulateRegion(Region region, Boolean hydrate) {
+        for (RegionWidget regionWidget : region.getRegionWidgets()) {
+            if (hydrate) {
+                hydrate((MongoDbRegionWidget) regionWidget, region);
+            } else {
+                region.getRegionWidgets().remove(regionWidget);
+                region.getRegionWidgets().add(convert(regionWidget));
+            }
+        }
+    }
+
+
+}

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java?rev=1398398&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/util/MongoDbModelUtil.java
 Mon Oct 15 17:18:40 2012
@@ -0,0 +1,15 @@
+package org.apache.rave.portal.model.util;
+
+import java.util.Random;
+
+/**
+ *
+ */
+public class MongoDbModelUtil {
+
+    private MongoDbModelUtil(){}
+
+    public static long generateId() {
+        return new Random().nextLong();
+    }
+}

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=1398398&r1=1398397&r2=1398398&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 17:18:40 2012
@@ -1,7 +1,7 @@
 package org.apache.rave.portal.repository.impl;
 
 import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.model.conversion.MongoDbReferenceConverter;
+import org.apache.rave.portal.model.conversion.MongoDbConverter;
 import org.apache.rave.portal.repository.PageRepository;
 import org.apache.rave.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,13 +22,13 @@ public class MongoDbPageRepository imple
     private MongoOperations mongoTemplate;
 
     @Autowired
-    private MongoDbReferenceConverter converter;
+    private MongoDbConverter converter;
 
     @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);
+            converter.hydrate(page, Page.class);
         }
         return CollectionUtils.<Page>toBaseTypedList(pages);
     }
@@ -78,15 +78,15 @@ public class MongoDbPageRepository imple
         if(fromDb == null) {
             throw new IllegalStateException("Could not find requested page: " 
+ id);
         }
-        converter.hydrate(fromDb);
+        converter.hydrate(fromDb, Page.class);
         return fromDb;
     }
 
     @Override
     public Page save(Page item) {
-        MongoDbPage converted = converter.convert(item);
+        MongoDbPage converted = converter.convert(item, Page.class);
         mongoTemplate.save(converted);
-        converter.hydrate(converted);
+        converter.hydrate(converted, Page.class);
         return converted;
     }
 


Reply via email to