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