Update data importer (RAVE-1063)

git-svn-id: https://svn.apache.org/repos/asf/rave/trunk@1530023 
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/c8110354
Tree: http://git-wip-us.apache.org/repos/asf/rave/tree/c8110354
Diff: http://git-wip-us.apache.org/repos/asf/rave/diff/c8110354

Branch: refs/heads/angular
Commit: c8110354f1a57b06c1ede722dc1cf33c74c1f60e
Parents: 6bd9fc2
Author: Matthew B. Franklin <[email protected]>
Authored: Mon Oct 7 18:38:01 2013 +0000
Committer: Matthew B. Franklin <[email protected]>
Committed: Mon Oct 7 18:38:01 2013 +0000

----------------------------------------------------------------------
 .../rave/portal/util/data/DataImporter.java     | 329 +------------------
 .../util/data/ModelWrapperDataExecutor.java     | 321 ++++++++++++++++++
 .../rave/portal/util/DataImporterTest.java      |   9 +-
 .../src/main/resources_jpa/dataContext.xml      |   3 +-
 .../src/main/resources_mongo/dataContext.xml    |   3 +-
 .../src/test/resources_jpa/test-dataContext.xml |   3 +-
 .../test/resources_mongo/test-dataContext.xml   |   3 +-
 7 files changed, 346 insertions(+), 325 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/DataImporter.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/DataImporter.java
 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/DataImporter.java
index 609d69a..6da0497 100644
--- 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/DataImporter.java
+++ 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/DataImporter.java
@@ -19,28 +19,18 @@
 
 package org.apache.rave.portal.util.data;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.rave.model.*;
-import org.apache.rave.portal.repository.*;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.Resource;
-import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 
 import static org.apache.rave.util.JsonUtils.parse;
 
-public class DataImporter {
+public class DataImporter<T> {
 
-    private DataImporter.Executor dataExecutor;
-    private List<Resource> scriptLocations;
+    protected DataImporter.Executor<T> dataExecutor;
+    protected List<Resource> scriptLocations;
+    protected Class<T> modelClass;
 
     public List<Resource> getScriptLocations() {
         return scriptLocations;
@@ -54,319 +44,22 @@ public class DataImporter {
     public void importData() {
         if (scriptLocations != null && dataExecutor.needsLoading()) {
             for (Resource resource : scriptLocations) {
-                ModelWrapper wrapper = parse(resource, ModelWrapper.class);
+                T wrapper = parse(resource, modelClass);
                 dataExecutor.loadData(wrapper);
             }
         }
     }
 
-    public void setDataExecutor(Executor dataExecutor) {
+    public void setDataExecutor(Executor<T> dataExecutor) {
         this.dataExecutor = dataExecutor;
     }
 
-    public static interface Executor {
-        boolean needsLoading();
-        void loadData(ModelWrapper models);
+    public void setModelClass(Class<T> modelClass) {
+        this.modelClass = modelClass;
     }
 
-    @Transactional
-    public static class ExecutorImpl implements Executor {
-
-        //TODO GROUP REPOSITORY
-        @Autowired
-        private PageLayoutRepository pageLayoutRepository;
-
-        @Autowired
-        private UserRepository userRepository;
-
-        @Autowired
-        private WidgetRepository widgetRepository;
-
-        @Autowired
-        private PageRepository pageRepository;
-
-        @Autowired
-        private AuthorityRepository authorityRepository;
-
-        @Autowired
-        private PortalPreferenceRepository portalPreferenceRepository;
-
-        @Autowired
-        private CategoryRepository categoryRepository;
-
-        @Autowired
-        private PageTemplateRepository pageTemplateRepository;
-
-        @Autowired
-        private ActivityStreamsRepository activityStreamsRepository;
-
-        public boolean needsLoading() {
-            return widgetRepository.getCountAll() == 0;
-        }
-
-        @Transactional
-        public void loadData(ModelWrapper wrapper) {
-            savePageLayouts(wrapper);
-            saveAuthorities(wrapper);
-            Map<String, User> usersByOriginalId = saveUsers(wrapper);
-            Map<String, Category> categoryByOldId = saveCategories(wrapper, 
usersByOriginalId);
-            Map<String,Widget> widgetsById = saveWidgets(wrapper, 
usersByOriginalId, categoryByOldId);
-            savePages(wrapper, usersByOriginalId, widgetsById);
-            savePreferences(wrapper);
-            saveTemplates(wrapper, widgetsById);
-            saveActivities(wrapper);
-        }
-
-        private void saveActivities(ModelWrapper wrapper) {
-            if(wrapper.getActivities() != null) {
-                for(ActivityStreamsEntry activity : wrapper.getActivities()) {
-                    activityStreamsRepository.save(activity);
-                }
-            }
-        }
-
-        private void saveTemplates(ModelWrapper wrapper, Map<String, Widget> 
widgetsById) {
-            for(PageTemplate template : wrapper.getPageTemplates()) {
-                updateTemplate(widgetsById, template);
-                for(PageTemplate sub : template.getSubPageTemplates()) {
-                    sub.setParentPageTemplate(template);
-                    updateTemplate(widgetsById, sub);
-                }
-                pageTemplateRepository.save(template);
-            }
-        }
-
-        private void updateTemplate(Map<String, Widget> widgetsById, 
PageTemplate template) {
-            setIdViaReflection(template, null);
-            for(PageTemplateRegion region : template.getPageTemplateRegions()) 
  {
-                setIdViaReflection(region, null);
-                region.setPageTemplate(template);
-                for(PageTemplateWidget widget : 
region.getPageTemplateWidgets()) {
-                    Widget fromDb = widgetsById.get(widget.getWidgetId());
-                    if(fromDb != null) {
-                        widget.setWidgetId(fromDb.getId());
-                    }
-                    setIdViaReflection(widget, null);
-                    widget.setPageTemplateRegion(region);
-                }
-
-            }
-        }
-
-        private Map<String, Category> saveCategories(ModelWrapper wrapper, 
Map<String, User> usersByOriginalId) {
-            Map<String, Category> categoryByOldId = Maps.newHashMap();
-            if (wrapper.getCategories() != null) {
-                for (Category category : wrapper.getCategories()) {
-                    String id = category.getId() == null ? category.getText() 
: category.getId();
-                    category.setId(null);
-                    User lastModified = 
usersByOriginalId.get(category.getLastModifiedUserId());
-                    if(lastModified != null)  {
-                        category.setLastModifiedUserId(lastModified.getId());
-                    }
-                    User created = 
usersByOriginalId.get(category.getCreatedUserId());
-                    if(created != null) {
-                        category.setCreatedUserId(created.getId());
-                    }
-                    categoryByOldId.put(id, categoryRepository.save(category));
-                }
-            }
-            return categoryByOldId;
-        }
-
-        private void savePreferences(ModelWrapper wrapper) {
-            if (wrapper.getPortalPreferences() != null) {
-                for (PortalPreference preference : 
wrapper.getPortalPreferences()) {
-                    portalPreferenceRepository.save(preference);
-                }
-            }
-        }
-
-        private Map<String, User> saveUsers(ModelWrapper wrapper) {
-            Map<String, User> usersByOriginalId = Maps.newHashMap();
-            if (wrapper.getUsers() != null) {
-                for (User user : wrapper.getUsers()) {
-                    String id = user.getId();
-                    user.setId(null);
-                    usersByOriginalId.put(id, userRepository.save(user));
-                }
-            }
-            return usersByOriginalId;
-        }
-
-        private void savePages(ModelWrapper wrapper, Map<String, User> 
usersByOriginalId, Map<String, Widget> widgetsById) {
-            if (wrapper.getPages() != null) {
-                for (Page page : wrapper.getPages()) {
-                    updatePage(usersByOriginalId, widgetsById, page);
-                    for(Page sub: page.getSubPages()) {
-                        sub.setParentPage(page);
-                        updatePage(usersByOriginalId, widgetsById, sub);
-                    }
-                    pageRepository.save(page);
-                }
-            }
-        }
-
-        private void updatePage(Map<String, User> usersByOriginalId, 
Map<String, Widget> widgetsById, Page page) {
-            for(Region region : page.getRegions()) {
-                region.setPage(page);
-                setIdViaReflection(region, null);
-                for(RegionWidget widget: region.getRegionWidgets()) {
-                    widget.setRegion(region);
-                    Widget fromDb = widgetsById.get(widget.getId());
-                    if(fromDb != null) {
-                        widget.setWidgetId(fromDb.getId());
-                    }
-                    setIdViaReflection(widget, null);
-                }
-            }
-            for(PageUser user: page.getMembers()) {
-                user.setPage(page);
-                setIdViaReflection(user, null);
-                User fromDb = usersByOriginalId.get(user.getUserId());
-                if(fromDb != null) {
-                    user.setUserId(fromDb.getId());
-                }
-            }
-            User user = usersByOriginalId.get(page.getOwnerId());
-            page.setOwnerId(user.getId());
-        }
-
-        private Map<String, Widget> saveWidgets(ModelWrapper wrapper, 
Map<String, User> usersById, Map<String, Category> categoryMap) {
-            Map<String, Widget> widgetsByOldId = Maps.newHashMap();
-            if (wrapper.getWidgets() != null) {
-                for (Widget widget : wrapper.getWidgets()) {
-                    String id = widget.getId() == null ? widget.getUrl() : 
widget.getId();
-                    setIdViaReflection(widget, null);
-                    User user = usersById.get(widget.getOwnerId());
-                    if(user != null) {
-                        widget.setOwnerId(user.getId());
-                    }
-                    List<Category> categories = Lists.newArrayList();
-                    if(widget.getCategories() != null) {
-                        for(Category c : widget.getCategories()) {
-                            categories.add(categoryMap.get(c.getId()));
-                        }
-                        widget.setCategories(categories);
-                    }
-                    widgetsByOldId.put(id, widgetRepository.save(widget));
-                }
-            }
-            return widgetsByOldId;
-        }
-
-        private void setIdViaReflection(Object target, Object id) {
-            Class clazz = target.getClass();
-            Method setter = getMethod(clazz, "setId");
-            if(setter != null) {
-                callMethod(target, setter, id);
-            } else {
-                setField(target, id, clazz);
-            }
-        }
-
-        private void setField(Object target, Object id, Class clazz) {
-            List<String> potentialFields = Arrays.asList("id", "_id", "id_");
-            for(String name : potentialFields) {
-                if(findAndSetField(clazz, target, id, name)) return;
-            }
-            throw new IllegalStateException("Could not match field");
-        }
-
-        private boolean findAndSetField(Class clazz, Object target, Object 
value, String name) {
-            Field idField = getField(clazz, name);
-            if(idField != null) {
-                setField(target, idField, value);
-                return true;
-            } else {
-                return false;
-            }
-        }
-
-        private Field getField(Class clazz, String match) {
-            Field field = null;
-            try {
-                field = clazz.getDeclaredField(match);
-            }catch (NoSuchFieldException e) {  }
-            return field;
-        }
-
-        private Method getMethod(Class clazz, String match) {
-            Method method = null;
-            try {
-                method = clazz.getMethod(match, Void.class);
-            } catch (NoSuchMethodException e) {}
-            return method;
-        }
-
-        private void callMethod(Object o, Method m, Object... param) {
-            try {
-                m.invoke(o, param);
-            } catch (IllegalAccessException e) {
-                throw new IllegalStateException("Unable to call method",e) ;
-            } catch (InvocationTargetException e) {
-                throw new IllegalStateException("Unable to call method",e) ;
-            }
-        }
-
-        private void setField(Object o, Field f, Object val) {
-            try {
-                f.set(o, val);
-            } catch (IllegalAccessException e) {
-                throw new IllegalStateException("Unable to set field",e) ;
-            }
-        }
-
-        private void saveAuthorities(ModelWrapper wrapper) {
-            if (wrapper.getAuthorities() != null) {
-                for (Authority authority : wrapper.getAuthorities()) {
-                    authorityRepository.save(authority);
-                }
-            }
-        }
-
-        private void savePageLayouts(ModelWrapper wrapper) {
-            if (wrapper.getPageLayouts() != null) {
-                for (PageLayout layout : wrapper.getPageLayouts()) {
-                    pageLayoutRepository.save(layout);
-                }
-            }
-        }
-
-
-        public void setPageLayoutRepository(PageLayoutRepository 
pageLayoutRepository) {
-            this.pageLayoutRepository = pageLayoutRepository;
-        }
-
-        public void setUserRepository(UserRepository userRepository) {
-            this.userRepository = userRepository;
-        }
-
-        public void setWidgetRepository(WidgetRepository widgetRepository) {
-            this.widgetRepository = widgetRepository;
-        }
-
-        public void setPageRepository(PageRepository pageRepository) {
-            this.pageRepository = pageRepository;
-        }
-
-        public void setAuthorityRepository(AuthorityRepository 
authorityRepository) {
-            this.authorityRepository = authorityRepository;
-        }
-
-        public void setPortalPreferenceRepository(PortalPreferenceRepository 
portalPreferenceRepository) {
-            this.portalPreferenceRepository = portalPreferenceRepository;
-        }
-
-        public void setCategoryRepository(CategoryRepository 
categoryRepository) {
-            this.categoryRepository = categoryRepository;
-        }
-
-        public void setPageTemplateRepository(PageTemplateRepository 
pageTemplateRepository) {
-            this.pageTemplateRepository = pageTemplateRepository;
-        }
-
-        public void setActivityStreamsRepository(ActivityStreamsRepository 
activityStreamsRepository) {
-            this.activityStreamsRepository = activityStreamsRepository;
-        }
+    public static interface Executor<T> {
+        boolean needsLoading();
+        void loadData(T models);
     }
 }

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/ModelWrapperDataExecutor.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/ModelWrapperDataExecutor.java
 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/ModelWrapperDataExecutor.java
new file mode 100644
index 0000000..7be372c
--- /dev/null
+++ 
b/rave-components/rave-core/src/main/java/org/apache/rave/portal/util/data/ModelWrapperDataExecutor.java
@@ -0,0 +1,321 @@
+package org.apache.rave.portal.util.data;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.rave.model.*;
+import org.apache.rave.portal.repository.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Implementation of the DataImporter for the {@link ModelWrapper}
+ */
+@Transactional
+public class ModelWrapperDataExecutor implements 
DataImporter.Executor<ModelWrapper> {
+
+    //TODO GROUP REPOSITORY
+    @Autowired
+    private PageLayoutRepository pageLayoutRepository;
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private WidgetRepository widgetRepository;
+
+    @Autowired
+    private PageRepository pageRepository;
+
+    @Autowired
+    private AuthorityRepository authorityRepository;
+
+    @Autowired
+    private PortalPreferenceRepository portalPreferenceRepository;
+
+    @Autowired
+    private CategoryRepository categoryRepository;
+
+    @Autowired
+    private PageTemplateRepository pageTemplateRepository;
+
+    @Autowired
+    private ActivityStreamsRepository activityStreamsRepository;
+
+    public boolean needsLoading() {
+        return widgetRepository.getCountAll() == 0;
+    }
+
+    @Transactional
+    public void loadData(ModelWrapper wrapper) {
+        savePageLayouts(wrapper);
+        saveAuthorities(wrapper);
+        Map<String, User> usersByOriginalId = saveUsers(wrapper);
+        Map<String, Category> categoryByOldId = saveCategories(wrapper, 
usersByOriginalId);
+        Map<String, Widget> widgetsById = saveWidgets(wrapper, 
usersByOriginalId, categoryByOldId);
+        savePages(wrapper, usersByOriginalId, widgetsById);
+        savePreferences(wrapper);
+        saveTemplates(wrapper, widgetsById);
+        saveActivities(wrapper);
+    }
+
+    private void saveActivities(ModelWrapper wrapper) {
+        if (wrapper.getActivities() != null) {
+            for (ActivityStreamsEntry activity : wrapper.getActivities()) {
+                activityStreamsRepository.save(activity);
+            }
+        }
+    }
+
+    private void saveTemplates(ModelWrapper wrapper, Map<String, Widget> 
widgetsById) {
+        for (PageTemplate template : wrapper.getPageTemplates()) {
+            updateTemplate(widgetsById, template);
+            for (PageTemplate sub : template.getSubPageTemplates()) {
+                sub.setParentPageTemplate(template);
+                updateTemplate(widgetsById, sub);
+            }
+            pageTemplateRepository.save(template);
+        }
+    }
+
+    private void updateTemplate(Map<String, Widget> widgetsById, PageTemplate 
template) {
+        setIdViaReflection(template, null);
+        for (PageTemplateRegion region : template.getPageTemplateRegions()) {
+            setIdViaReflection(region, null);
+            region.setPageTemplate(template);
+            for (PageTemplateWidget widget : region.getPageTemplateWidgets()) {
+                Widget fromDb = widgetsById.get(widget.getWidgetId());
+                if (fromDb != null) {
+                    widget.setWidgetId(fromDb.getId());
+                }
+                setIdViaReflection(widget, null);
+                widget.setPageTemplateRegion(region);
+            }
+
+        }
+    }
+
+    private Map<String, Category> saveCategories(ModelWrapper wrapper, 
Map<String, User> usersByOriginalId) {
+        Map<String, Category> categoryByOldId = Maps.newHashMap();
+        if (wrapper.getCategories() != null) {
+            for (Category category : wrapper.getCategories()) {
+                String id = category.getId() == null ? category.getText() : 
category.getId();
+                category.setId(null);
+                User lastModified = 
usersByOriginalId.get(category.getLastModifiedUserId());
+                if (lastModified != null) {
+                    category.setLastModifiedUserId(lastModified.getId());
+                }
+                User created = 
usersByOriginalId.get(category.getCreatedUserId());
+                if (created != null) {
+                    category.setCreatedUserId(created.getId());
+                }
+                categoryByOldId.put(id, categoryRepository.save(category));
+            }
+        }
+        return categoryByOldId;
+    }
+
+    private void savePreferences(ModelWrapper wrapper) {
+        if (wrapper.getPortalPreferences() != null) {
+            for (PortalPreference preference : wrapper.getPortalPreferences()) 
{
+                portalPreferenceRepository.save(preference);
+            }
+        }
+    }
+
+    private Map<String, User> saveUsers(ModelWrapper wrapper) {
+        Map<String, User> usersByOriginalId = Maps.newHashMap();
+        if (wrapper.getUsers() != null) {
+            for (User user : wrapper.getUsers()) {
+                String id = user.getId();
+                user.setId(null);
+                usersByOriginalId.put(id, userRepository.save(user));
+            }
+        }
+        return usersByOriginalId;
+    }
+
+    private void savePages(ModelWrapper wrapper, Map<String, User> 
usersByOriginalId, Map<String, Widget> widgetsById) {
+        if (wrapper.getPages() != null) {
+            for (Page page : wrapper.getPages()) {
+                updatePage(usersByOriginalId, widgetsById, page);
+                for (Page sub : page.getSubPages()) {
+                    sub.setParentPage(page);
+                    updatePage(usersByOriginalId, widgetsById, sub);
+                }
+                pageRepository.save(page);
+            }
+        }
+    }
+
+    private void updatePage(Map<String, User> usersByOriginalId, Map<String, 
Widget> widgetsById, Page page) {
+        for (Region region : page.getRegions()) {
+            region.setPage(page);
+            setIdViaReflection(region, null);
+            for (RegionWidget widget : region.getRegionWidgets()) {
+                widget.setRegion(region);
+                Widget fromDb = widgetsById.get(widget.getId());
+                if (fromDb != null) {
+                    widget.setWidgetId(fromDb.getId());
+                }
+                setIdViaReflection(widget, null);
+            }
+        }
+        for (PageUser user : page.getMembers()) {
+            user.setPage(page);
+            setIdViaReflection(user, null);
+            User fromDb = usersByOriginalId.get(user.getUserId());
+            if (fromDb != null) {
+                user.setUserId(fromDb.getId());
+            }
+        }
+        User user = usersByOriginalId.get(page.getOwnerId());
+        page.setOwnerId(user.getId());
+    }
+
+    private Map<String, Widget> saveWidgets(ModelWrapper wrapper, Map<String, 
User> usersById, Map<String, Category> categoryMap) {
+        Map<String, Widget> widgetsByOldId = Maps.newHashMap();
+        if (wrapper.getWidgets() != null) {
+            for (Widget widget : wrapper.getWidgets()) {
+                String id = widget.getId() == null ? widget.getUrl() : 
widget.getId();
+                setIdViaReflection(widget, null);
+                User user = usersById.get(widget.getOwnerId());
+                if (user != null) {
+                    widget.setOwnerId(user.getId());
+                }
+                List<Category> categories = Lists.newArrayList();
+                if (widget.getCategories() != null) {
+                    for (Category c : widget.getCategories()) {
+                        categories.add(categoryMap.get(c.getId()));
+                    }
+                    widget.setCategories(categories);
+                }
+                widgetsByOldId.put(id, widgetRepository.save(widget));
+            }
+        }
+        return widgetsByOldId;
+    }
+
+    private void setIdViaReflection(Object target, Object id) {
+        Class clazz = target.getClass();
+        Method setter = getMethod(clazz, "setId");
+        if (setter != null) {
+            callMethod(target, setter, id);
+        } else {
+            setField(target, id, clazz);
+        }
+    }
+
+    private void setField(Object target, Object id, Class clazz) {
+        List<String> potentialFields = Arrays.asList("id", "_id", "id_");
+        for (String name : potentialFields) {
+            if (findAndSetField(clazz, target, id, name)) return;
+        }
+        throw new IllegalStateException("Could not match field");
+    }
+
+    private boolean findAndSetField(Class clazz, Object target, Object value, 
String name) {
+        Field idField = getField(clazz, name);
+        if (idField != null) {
+            setField(target, idField, value);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private Field getField(Class clazz, String match) {
+        Field field = null;
+        try {
+            field = clazz.getDeclaredField(match);
+        } catch (NoSuchFieldException e) {
+        }
+        return field;
+    }
+
+    private Method getMethod(Class clazz, String match) {
+        Method method = null;
+        try {
+            method = clazz.getMethod(match, Void.class);
+        } catch (NoSuchMethodException e) {
+        }
+        return method;
+    }
+
+    private void callMethod(Object o, Method m, Object... param) {
+        try {
+            m.invoke(o, param);
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException("Unable to call method", e);
+        } catch (InvocationTargetException e) {
+            throw new IllegalStateException("Unable to call method", e);
+        }
+    }
+
+    private void setField(Object o, Field f, Object val) {
+        try {
+            f.set(o, val);
+        } catch (IllegalAccessException e) {
+            throw new IllegalStateException("Unable to set field", e);
+        }
+    }
+
+    private void saveAuthorities(ModelWrapper wrapper) {
+        if (wrapper.getAuthorities() != null) {
+            for (Authority authority : wrapper.getAuthorities()) {
+                authorityRepository.save(authority);
+            }
+        }
+    }
+
+    private void savePageLayouts(ModelWrapper wrapper) {
+        if (wrapper.getPageLayouts() != null) {
+            for (PageLayout layout : wrapper.getPageLayouts()) {
+                pageLayoutRepository.save(layout);
+            }
+        }
+    }
+
+    public void setPageLayoutRepository(PageLayoutRepository 
pageLayoutRepository) {
+        this.pageLayoutRepository = pageLayoutRepository;
+    }
+
+    public void setUserRepository(UserRepository userRepository) {
+        this.userRepository = userRepository;
+    }
+
+    public void setWidgetRepository(WidgetRepository widgetRepository) {
+        this.widgetRepository = widgetRepository;
+    }
+
+    public void setPageRepository(PageRepository pageRepository) {
+        this.pageRepository = pageRepository;
+    }
+
+    public void setAuthorityRepository(AuthorityRepository 
authorityRepository) {
+        this.authorityRepository = authorityRepository;
+    }
+
+    public void setPortalPreferenceRepository(PortalPreferenceRepository 
portalPreferenceRepository) {
+        this.portalPreferenceRepository = portalPreferenceRepository;
+    }
+
+    public void setCategoryRepository(CategoryRepository categoryRepository) {
+        this.categoryRepository = categoryRepository;
+    }
+
+    public void setPageTemplateRepository(PageTemplateRepository 
pageTemplateRepository) {
+        this.pageTemplateRepository = pageTemplateRepository;
+    }
+
+    public void setActivityStreamsRepository(ActivityStreamsRepository 
activityStreamsRepository) {
+        this.activityStreamsRepository = activityStreamsRepository;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-components/rave-core/src/test/java/org/apache/rave/portal/util/DataImporterTest.java
----------------------------------------------------------------------
diff --git 
a/rave-components/rave-core/src/test/java/org/apache/rave/portal/util/DataImporterTest.java
 
b/rave-components/rave-core/src/test/java/org/apache/rave/portal/util/DataImporterTest.java
index 7b5f0b4..9b060fb 100644
--- 
a/rave-components/rave-core/src/test/java/org/apache/rave/portal/util/DataImporterTest.java
+++ 
b/rave-components/rave-core/src/test/java/org/apache/rave/portal/util/DataImporterTest.java
@@ -23,6 +23,8 @@ import org.apache.rave.model.*;
 import org.apache.rave.portal.model.impl.*;
 import org.apache.rave.portal.repository.*;
 import org.apache.rave.portal.util.data.DataImporter;
+import org.apache.rave.portal.util.data.ModelWrapper;
+import org.apache.rave.portal.util.data.ModelWrapperDataExecutor;
 import org.junit.Before;
 import org.junit.Test;
 import org.springframework.core.io.ClassPathResource;
@@ -43,7 +45,7 @@ public class DataImporterTest {
     private CategoryRepository categoryRepository;
     private PageTemplateRepository pageTemplateRepository;
     private ActivityStreamsRepository activityStreamsRepository;
-    private DataImporter importer;
+    private DataImporter<ModelWrapper> importer;
 
     @Before
     public void setup() {
@@ -57,7 +59,7 @@ public class DataImporterTest {
         pageTemplateRepository = createMock(PageTemplateRepository.class);
         activityStreamsRepository = 
createMock(ActivityStreamsRepository.class);
 
-        DataImporter.ExecutorImpl executor = new DataImporter.ExecutorImpl();
+        ModelWrapperDataExecutor executor = new ModelWrapperDataExecutor();
         executor.setPageLayoutRepository(pageLayoutRepository);
         executor.setUserRepository(userRepository);
         executor.setWidgetRepository(widgetRepository);
@@ -68,9 +70,10 @@ public class DataImporterTest {
         executor.setPageTemplateRepository(pageTemplateRepository);
         executor.setActivityStreamsRepository(activityStreamsRepository);
 
-        importer = new DataImporter();
+        importer = new DataImporter<ModelWrapper>();
         importer.setScriptLocations(Arrays.asList((Resource) new 
ClassPathResource("test-data.json")));
         importer.setDataExecutor(executor);
+        importer.setModelClass(ModelWrapper.class);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-portal-resources/src/main/resources_jpa/dataContext.xml
----------------------------------------------------------------------
diff --git a/rave-portal-resources/src/main/resources_jpa/dataContext.xml 
b/rave-portal-resources/src/main/resources_jpa/dataContext.xml
index 48da3cd..8d58bbf 100644
--- a/rave-portal-resources/src/main/resources_jpa/dataContext.xml
+++ b/rave-portal-resources/src/main/resources_jpa/dataContext.xml
@@ -29,8 +29,9 @@
    <import 
resource="classpath*:org/apache/rave/persistence-applicationContext.xml" />
 
     <bean id="dataImporter" 
class="org.apache.rave.portal.util.data.DataImporter">
+        <property name="modelClass" 
value="org.apache.rave.portal.util.data.ModelWrapper" />
         <property name="dataExecutor">
-            <bean 
class="org.apache.rave.portal.util.data.DataImporter$ExecutorImpl" />
+            <bean 
class="org.apache.rave.portal.util.data.ModelWrapperDataExecutor" />
         </property>
         <property name="scriptLocations">
             <list>

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-portal-resources/src/main/resources_mongo/dataContext.xml
----------------------------------------------------------------------
diff --git a/rave-portal-resources/src/main/resources_mongo/dataContext.xml 
b/rave-portal-resources/src/main/resources_mongo/dataContext.xml
index 70b0e68..0008b99 100644
--- a/rave-portal-resources/src/main/resources_mongo/dataContext.xml
+++ b/rave-portal-resources/src/main/resources_mongo/dataContext.xml
@@ -29,8 +29,9 @@
     <import 
resource="classpath*:org/apache/rave/persistence-applicationContext.xml" />
 
     <bean id="dataImporter" 
class="org.apache.rave.portal.util.data.DataImporter">
+        <property name="modelClass" 
value="org.apache.rave.portal.util.data.ModelWrapper" />
         <property name="dataExecutor">
-            <bean 
class="org.apache.rave.portal.util.data.DataImporter$ExecutorImpl" />
+            <bean 
class="org.apache.rave.portal.util.data.ModelWrapperDataExecutor" />
         </property>
         <property name="scriptLocations">
             <list>

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-portal/src/test/resources_jpa/test-dataContext.xml
----------------------------------------------------------------------
diff --git a/rave-portal/src/test/resources_jpa/test-dataContext.xml 
b/rave-portal/src/test/resources_jpa/test-dataContext.xml
index 70d8a02..6235c60 100644
--- a/rave-portal/src/test/resources_jpa/test-dataContext.xml
+++ b/rave-portal/src/test/resources_jpa/test-dataContext.xml
@@ -66,8 +66,9 @@
     </bean>
 
     <bean id="dataImporter" 
class="org.apache.rave.portal.util.data.DataImporter">
+        <property name="modelClass" 
value="org.apache.rave.portal.util.data.ModelWrapper" />
         <property name="dataExecutor">
-            <bean 
class="org.apache.rave.portal.util.data.DataImporter$ExecutorImpl" />
+            <bean 
class="org.apache.rave.portal.util.data.ModelWrapperDataExecutor" />
         </property>
         <property name="scriptLocations">
             <list>

http://git-wip-us.apache.org/repos/asf/rave/blob/c8110354/rave-portal/src/test/resources_mongo/test-dataContext.xml
----------------------------------------------------------------------
diff --git a/rave-portal/src/test/resources_mongo/test-dataContext.xml 
b/rave-portal/src/test/resources_mongo/test-dataContext.xml
index abf7597..2dfc9bc 100644
--- a/rave-portal/src/test/resources_mongo/test-dataContext.xml
+++ b/rave-portal/src/test/resources_mongo/test-dataContext.xml
@@ -52,8 +52,9 @@
 
 
     <bean id="dataImporter" 
class="org.apache.rave.portal.util.data.DataImporter">
+        <property name="modelClass" 
value="org.apache.rave.portal.util.data.ModelWrapper" />
         <property name="dataExecutor">
-            <bean 
class="org.apache.rave.portal.util.data.DataImporter$ExecutorImpl" />
+            <bean 
class="org.apache.rave.portal.util.data.ModelWrapperDataExecutor" />
         </property>
         <property name="scriptLocations">
             <list>

Reply via email to