Author: mfranklin
Date: Tue Oct 16 14:54:23 2012
New Revision: 1398830

URL: http://svn.apache.org/viewvc?rev=1398830&view=rev
Log:
Refactored implementations to MongoModelTemplate

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoUserTemplate.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoWidgetTemplate.java
Modified:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoModelOperations.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoModelOperations.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoModelOperations.java?rev=1398830&r1=1398829&r2=1398830&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoModelOperations.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoModelOperations.java
 Tue Oct 16 14:54:23 2012
@@ -20,6 +20,8 @@
 package org.apache.rave.portal.repository;
 
 import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.model.Widget;
 import org.springframework.data.mongodb.core.query.Query;
 
 import java.util.List;
@@ -35,6 +37,6 @@ public interface MongoModelOperations<T>
     T save(T item);
 
     public static interface MongoPageOperations extends 
MongoModelOperations<Page> {}
-    public static interface MongoUserOperations extends 
MongoModelOperations<Page> {}
-    public static interface MongoWidgetOperations extends 
MongoModelOperations<Page> {}
+    public static interface MongoUserOperations extends 
MongoModelOperations<User> {}
+    public static interface MongoWidgetOperations extends 
MongoModelOperations<Widget> {}
 }

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=1398830&r1=1398829&r2=1398830&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 14:54:23 2012
@@ -20,12 +20,10 @@
 package org.apache.rave.portal.repository.impl;
 
 import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
 import org.apache.rave.portal.model.util.WidgetStatistics;
+import org.apache.rave.portal.repository.MongoModelOperations;
 import org.apache.rave.portal.repository.WidgetRepository;
-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.Criteria;
 import org.springframework.data.mongodb.core.query.Order;
 import org.springframework.data.mongodb.core.query.Query;
@@ -41,79 +39,73 @@ import static org.springframework.data.m
  */
 @Repository
 public class MongoDbWidgetRepository implements WidgetRepository {
-    public static final String COLLECTION = "widget";
 
     @Autowired
-    private MongoOperations template;
-
-    @Autowired
-    private HydratingConverterFactory converter;
+    private MongoModelOperations.MongoWidgetOperations template;
 
     @Override
     public List<Widget> getAll() {
-        return null;
+        return template.find(new Query());
     }
 
     @Override
     public List<Widget> getLimitedList(int offset, int pageSize) {
-        return hydrateWidgets(template.find(new 
Query().skip(offset).limit(pageSize), MongoDbWidget.class, COLLECTION));
+        return template.find(new Query().skip(offset).limit(pageSize));
     }
 
     @Override
     public int getCountAll() {
-        return (int)template.count(new Query(), COLLECTION);
+        return (int)template.count(new Query());
     }
 
     @Override
     public List<Widget> getByFreeTextSearch(String searchTerm, int offset, int 
pageSize) {
         Query query = new 
Query(getFreeTextClause(searchTerm)).skip(offset).limit(pageSize);
-        return hydrateWidgets(template.find(query, MongoDbWidget.class, 
COLLECTION));
+        return template.find(query);
     }
 
     @Override
     public int getCountFreeTextSearch(String searchTerm) {
-        return 0;
+        return (int)template.count(new Query(getFreeTextClause(searchTerm)));
     }
 
     @Override
     public List<Widget> getByStatus(WidgetStatus widgetStatus, int offset, int 
pageSize) {
         Query query = new 
Query(where("widgetStatus").is(widgetStatus)).skip(offset).limit(pageSize);
-        query.sort().on("title", Order.ASCENDING);
-        List<MongoDbWidget> widgets = template.find(query, 
MongoDbWidget.class, COLLECTION);
-        return hydrateWidgets(widgets);
+        return template.find(query);
     }
 
     @Override
     public int getCountByStatus(WidgetStatus widgetStatus) {
-        return (int)template.count(new 
Query(where("widgetStatus").is(widgetStatus)), COLLECTION);
+        return (int)template.count(new 
Query(where("widgetStatus").is(widgetStatus)));
     }
 
     @Override
     public List<Widget> getByStatusAndTypeAndFreeTextSearch(WidgetStatus 
widgetStatus, String type, String searchTerm, int offset, int pageSize) {
         Query query = getWidgetStatusFreeTextQuery(widgetStatus, type, 
searchTerm).limit(pageSize).skip(offset);
         query.sort().on("title", Order.ASCENDING);
-        List<MongoDbWidget> widgets = template.find(query, 
MongoDbWidget.class, COLLECTION);
-        return hydrateWidgets(widgets);
+        return template.find(query);
     }
 
     @Override
     public int getCountByStatusAndTypeAndFreeText(WidgetStatus widgetStatus, 
String type, String searchTerm) {
-        return (int)template.count(getWidgetStatusFreeTextQuery(widgetStatus, 
type, searchTerm), COLLECTION);
+        return (int)template.count(getWidgetStatusFreeTextQuery(widgetStatus, 
type, searchTerm));
     }
 
     @Override
     public List<Widget> getByOwner(User owner, int offset, int pageSize) {
-        return null;
+        Query query = getQueryByOwner(owner).skip(offset).limit(pageSize);
+        return template.find(query);
     }
 
     @Override
     public int getCountByOwner(User owner, int offset, int pageSize) {
-        return 0;  //To change body of implemented methods use File | Settings 
| File Templates.
+        return (int)template.count(getQueryByOwner(owner));
     }
 
     @Override
     public Widget getByUrl(String widgetUrl) {
-        return hydrateWidget(template.findOne(new 
Query(where("url").is(widgetUrl)), MongoDbWidget.class, COLLECTION));
+        return template.findOne(new Query(where("url").is(widgetUrl)));
     }
 
     @Override
@@ -153,32 +145,17 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public Widget get(long id) {
-        return hydrateWidget(template.findById(id, MongoDbWidget.class, 
COLLECTION));
+        return template.get(id);
     }
 
     @Override
     public Widget save(Widget item) {
-        MongoDbWidget converted = converter.convert(item, Widget.class);
-        template.save(converted, COLLECTION);
-        converter.hydrate(converted, Widget.class);
-        return converted;
+        return template.save(item);
     }
 
     @Override
     public void delete(Widget item) {
-        template.remove(template.findById(item.getId(), MongoDbWidget.class, 
COLLECTION));
-    }
-
-    private List<Widget> hydrateWidgets(List<MongoDbWidget> widgets) {
-        for(MongoDbWidget widget : widgets) {
-            converter.hydrate(widget, Widget.class);
-        }
-        return CollectionUtils.<Widget>toBaseTypedList(widgets);
-    }
-
-    private Widget hydrateWidget(MongoDbWidget widget) {
-        converter.hydrate(widget, Widget.class);
-        return widget;
+        template.remove(new Query(where("_id").is(item.getId())));
     }
 
     private Query getWidgetStatusFreeTextQuery(WidgetStatus widgetStatus, 
String type, String searchTerm) {
@@ -192,4 +169,8 @@ public class MongoDbWidgetRepository imp
         String regex = "/" + searchTerm + "/";
         return where("title").is(regex).orOperator(where("title").is(regex));
     }
+
+    private Query getQueryByOwner(User owner) {
+        return new Query(where("ownerId").is(owner.getId()));
+    }
 }

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java?rev=1398830&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
 Tue Oct 16 14:54:23 2012
@@ -0,0 +1,99 @@
+/*
+ * 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.conversion.HydratingConverterFactory;
+import org.apache.rave.portal.repository.MongoModelOperations;
+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 MongoModelTemplate<T, E extends T> implements 
MongoModelOperations<T> {
+
+    @Autowired
+    protected MongoOperations mongoTemplate;
+
+    @Autowired
+    protected HydratingConverterFactory converter;
+    
+    protected final Class<T> type;
+    protected final Class<E> dbType;
+    protected final String collection;
+    
+    public MongoModelTemplate(Class<T> type, Class<E> dbType, String 
collection) {
+        this.type = type;
+        this.dbType = dbType;
+        this.collection = collection;
+    } 
+
+    @Override
+    public long count(Query query) {
+        return mongoTemplate.count(query, collection);
+    }
+
+    @Override
+    public void remove(Query query) {
+        mongoTemplate.remove(query, collection);
+    }
+
+    @Override
+    public T get(long id) {
+        E fromDb = mongoTemplate.findById(id, dbType, collection);
+        if(fromDb == null) {
+            throw new IllegalStateException("Could not find requested page: " 
+ id);
+        }
+        return hydrate(fromDb);
+    }
+
+    @Override
+    public T save(T item) {
+        E converted = converter.convert(item, type);
+        mongoTemplate.save(converted, collection);
+        converter.hydrate(converted, type);
+        return converted;
+    }
+
+    @Override
+    public T findOne(Query query) {
+        return hydrate(mongoTemplate.findOne(query, dbType, collection));
+    }
+
+    @Override
+    public List<T> find(Query query) {
+        return hydrate(mongoTemplate.find(query, dbType, collection));
+    }
+
+    private List<T> hydrate(List<E> mongoDbTs) {
+        for(E p : mongoDbTs) {
+            hydrate(p);
+        }
+        return CollectionUtils.<T>toBaseTypedList(mongoDbTs);
+    }
+
+    private T hydrate(E page) {
+        converter.hydrate(page, type);
+        return page;
+    }
+}

Modified: 
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=1398830&r1=1398829&r2=1398830&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoPageTemplate.java
 Tue Oct 16 14:54:23 2012
@@ -21,75 +21,16 @@ package org.apache.rave.portal.repositor
 
 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.MongoModelOperations;
-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.Component;
 
-import java.util.List;
-
 /**
  */
 @Component
-public class MongoPageTemplate implements 
MongoModelOperations.MongoPageOperations {
+public class MongoPageTemplate extends MongoModelTemplate<Page, MongoDbPage> 
implements MongoModelOperations.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;
+    public MongoPageTemplate() {
+        super(Page.class, MongoDbPage.class, COLLECTION);
     }
 }

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoUserTemplate.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoUserTemplate.java?rev=1398830&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoUserTemplate.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoUserTemplate.java
 Tue Oct 16 14:54:23 2012
@@ -0,0 +1,32 @@
+/*
+ * 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.MongoDbUser;
+import org.apache.rave.portal.model.User;
+import org.apache.rave.portal.repository.MongoModelOperations;
+
+public class MongoUserTemplate extends MongoModelTemplate<User, MongoDbUser> 
implements MongoModelOperations.MongoUserOperations {
+    public static final String COLLECTION = "person";
+
+    public MongoUserTemplate() {
+        super(User.class, MongoDbUser.class, COLLECTION);
+    }
+}

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoWidgetTemplate.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoWidgetTemplate.java?rev=1398830&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoWidgetTemplate.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoWidgetTemplate.java
 Tue Oct 16 14:54:23 2012
@@ -0,0 +1,38 @@
+/*
+ * 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.MongoDbWidget;
+import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.repository.MongoModelOperations;
+import org.springframework.stereotype.Component;
+
+/**
+ */
+@Component
+public class MongoWidgetTemplate extends MongoModelTemplate<Widget, 
MongoDbWidget> implements MongoModelOperations.MongoWidgetOperations {
+    
+    public static final String COLLECTION = "widget";
+
+    public MongoWidgetTemplate() {
+        super(Widget.class, MongoDbWidget.class, COLLECTION);
+    }
+
+}


Reply via email to