Author: mfranklin
Date: Tue Oct 23 21:12:29 2012
New Revision: 1401484

URL: http://svn.apache.org/viewvc?rev=1401484&view=rev
Log:
fixed map/reduce issue with null ratings

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageLayout.java
Removed:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/PageLayoutImplConverter.java
Modified:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbCategory.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbCategoryConverter.java
    
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/MongoWidgetOperations.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbCategoryRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageLayoutRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbTagRepository.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/MongoModelTemplate.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsMap.js
    
rave/branches/mongo/rave-portal-resources/src/main/resources/initial-data.json

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbCategory.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbCategory.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbCategory.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbCategory.java
 Tue Oct 23 21:12:29 2012
@@ -90,7 +90,7 @@ public class MongoDbCategory extends Cat
     @Override
     public User getCreatedUser() {
         User creator = super.getCreatedUser();
-        if(creator == null && createdUserId != null) {
+        if(creator == null && createdUserId != null && userRepository != null) 
{
             creator = userRepository.get(createdUserId);
             super.setCreatedUser(creator);
         }
@@ -100,7 +100,7 @@ public class MongoDbCategory extends Cat
     @Override
     public User getLastModifiedUser() {
         User lastModifier = super.getLastModifiedUser();
-        if(lastModifier == null && lastModifiedUserId != null) {
+        if(lastModifier == null && lastModifiedUserId != null && 
userRepository != null) {
             lastModifier = userRepository.get(lastModifiedUserId);
             super.setLastModifiedUser(lastModifier);
         }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbCategoryConverter.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbCategoryConverter.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbCategoryConverter.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbCategoryConverter.java
 Tue Oct 23 21:12:29 2012
@@ -59,14 +59,14 @@ public class MongoDbCategoryConverter im
     @Override
     public MongoDbCategory convert(Category source) {
         MongoDbCategory category = source instanceof MongoDbCategory ? 
((MongoDbCategory) source) : new MongoDbCategory();
+        category.setCreatedDate(source.getCreatedDate());
+        category.setCreatedUserId(source.getCreatedUser() ==null ? null : 
source.getCreatedUser().getId());
+        category.setLastModifiedUserId(source.getLastModifiedUser() == null ? 
null : source.getLastModifiedUser().getId());
+        category.setId(source.getId() == null ? generateId() : source.getId());
         category.setWidgetRepository(null);
         category.setUserRepository(null);
-        category.setCreatedUserId(source.getCreatedUser().getId());
         category.setCreatedUser(null);
-        category.setLastModifiedUserId(source.getLastModifiedUser().getId());
         category.setLastModifiedUser(null);
-        category.setCreatedDate(source.getCreatedDate());
-        category.setId(source.getId() == null ? generateId() : source.getId());
         category.setText(source.getText());
         ArrayList<Long> widgetIds = Lists.<Long>newArrayList();
         category.setWidgetIds(widgetIds);

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageLayout.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageLayout.java?rev=1401484&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageLayout.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/conversion/impl/MongoDbPageLayout.java
 Tue Oct 23 21:12:29 2012
@@ -0,0 +1,55 @@
+/*
+ * 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.model.conversion.impl;
+
+
+import org.apache.rave.portal.model.impl.PageLayoutImpl;
+
+public class MongoDbPageLayout extends PageLayoutImpl{
+    private Long id;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof MongoDbPageLayout)) return false;
+        if (!super.equals(o)) return false;
+
+        MongoDbPageLayout that = (MongoDbPageLayout) o;
+
+        if (id != null ? !id.equals(that.id) : that.id != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (id != null ? id.hashCode() : 0);
+        return result;
+    }
+}

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=1401484&r1=1401483&r2=1401484&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 23 21:12:29 2012
@@ -19,6 +19,7 @@
 
 package org.apache.rave.portal.repository;
 
+import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 
@@ -34,4 +35,8 @@ public interface MongoModelOperations<T>
     T save(T item);
     void remove(Query query);
     int update(Query query, Update update);
+    <E> MapReduceResults<E> mapReduce(String mapFunction, String 
reduceFunction, Class<E> entityClass);
+    <E> MapReduceResults<E> mapReduce(String collection, String mapFunction, 
String reduceFunction, Class<E> entityClass);
+    <E> MapReduceResults<E> mapReduce(Query query, String mapFunction, String 
reduceFunction, Class<E> entityClass);
+    <E> MapReduceResults<E> mapReduce(String collection, Query query, String 
mapFunction, String reduceFunction, Class<E> entityClass);
 }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoWidgetOperations.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoWidgetOperations.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoWidgetOperations.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/MongoWidgetOperations.java
 Tue Oct 23 21:12:29 2012
@@ -20,10 +20,6 @@
 package org.apache.rave.portal.repository;
 
 import org.apache.rave.portal.model.Widget;
-import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
-import org.springframework.data.mongodb.core.query.Query;
 
 public interface MongoWidgetOperations extends MongoModelOperations<Widget> {
-    <T> MapReduceResults<T> mapReduce(String mapFunction, String 
reduceFunction, Class<T> entityClass);
-    <T> MapReduceResults<T> mapReduce(Query query, String mapFunction, String 
reduceFunction, Class<T> entityClass);
 }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbCategoryRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbCategoryRepository.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbCategoryRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbCategoryRepository.java
 Tue Oct 23 21:12:29 2012
@@ -83,7 +83,7 @@ public class MongoDbCategoryRepository i
 
     @Override
     public void delete(Category item) {
-        template.remove(get(item.getId()));
+        template.remove(get(item.getId()), COLLECTION);
     }
 
     private Category hydrate(MongoDbCategory category) {

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageLayoutRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageLayoutRepository.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageLayoutRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbPageLayoutRepository.java
 Tue Oct 23 21:12:29 2012
@@ -21,8 +21,7 @@ package org.apache.rave.portal.repositor
 
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.rave.portal.model.PageLayout;
-import org.apache.rave.portal.model.conversion.HydratingConverterFactory;
-import org.apache.rave.portal.model.impl.PageLayoutImpl;
+import org.apache.rave.portal.model.conversion.impl.MongoDbPageLayout;
 import org.apache.rave.portal.repository.PageLayoutRepository;
 import org.apache.rave.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,38 +31,37 @@ import org.springframework.stereotype.Re
 
 import java.util.List;
 
+import static org.apache.rave.portal.model.util.MongoDbModelUtil.generateId;
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 
 @Repository
 public class MongoDbPageLayoutRepository implements PageLayoutRepository {
 
     public static final String COLLECTION = "pageLayout";
+    public static final Class<MongoDbPageLayout> CLASS = 
MongoDbPageLayout.class;
 
     @Autowired
     private MongoOperations template;
 
-    @Autowired
-    private HydratingConverterFactory converter;
-
     @Override
     public PageLayout getByPageLayoutCode(String codename) {
-        return template.findOne(new Query(where("code").is(codename)), 
PageLayoutImpl.class, COLLECTION);
+        return template.findOne(new Query(where("code").is(codename)), CLASS, 
COLLECTION);
     }
 
     @Override
     public List<PageLayout> getAll() {
-        return 
CollectionUtils.<PageLayout>toBaseTypedList(template.findAll(PageLayoutImpl.class,
 COLLECTION));
+        return 
CollectionUtils.<PageLayout>toBaseTypedList(template.findAll(CLASS, 
COLLECTION));
     }
 
     @Override
     public List<PageLayout> getAllUserSelectable() {
-        List<PageLayoutImpl> userSelectable = template.find(new 
Query(where("userSelectable").is(true)), PageLayoutImpl.class, COLLECTION);
+        List<MongoDbPageLayout> userSelectable = template.find(new 
Query(where("userSelectable").is(true)), CLASS, COLLECTION);
         return CollectionUtils.<PageLayout>toBaseTypedList(userSelectable);
     }
 
     @Override
     public Class<? extends PageLayout> getType() {
-        return PageLayoutImpl.class;
+        return CLASS;
     }
 
     @Override
@@ -73,12 +71,25 @@ public class MongoDbPageLayoutRepository
 
     @Override
     public PageLayout save(PageLayout item) {
-        template.save(converter.convert(item, PageLayout.class), COLLECTION);
-        return item;
+        MongoDbPageLayout toSave = 
(MongoDbPageLayout)getByPageLayoutCode(item.getCode());
+        if(toSave == null) {
+            toSave = new MongoDbPageLayout();
+            toSave.setId(generateId());
+        }
+        update(item, toSave);
+        template.save(toSave, COLLECTION);
+        return toSave;
     }
 
     @Override
     public void delete(PageLayout item) {
         template.remove(getByPageLayoutCode(item.getCode()));
     }
+
+    private void update(PageLayout source, PageLayout converted) {
+        converted.setCode(source.getCode());
+        converted.setNumberOfRegions(source.getNumberOfRegions());
+        converted.setRenderSequence(source.getRenderSequence());
+        converted.setUserSelectable(source.isUserSelectable());
+    }
 }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbTagRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbTagRepository.java?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbTagRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbTagRepository.java
 Tue Oct 23 21:12:29 2012
@@ -98,6 +98,9 @@ public class MongoDbTagRepository implem
 
 
     private void addUniqueTags(List<Tag> tags, Widget widget) {
+        //returns if there are no tags for this widget to prevent null pointer 
exception
+        if(widget.getTags() == null) return;
+
         for(WidgetTag widgetTag : widget.getTags()) {
             Tag tag = widgetTag.getTag();
             if(!tags.contains(tag)) {

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=1401484&r1=1401483&r2=1401484&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 23 21:12:29 2012
@@ -43,11 +43,12 @@ import static org.springframework.data.m
  */
 @Repository
 public class MongoDbWidgetRepository implements WidgetRepository {
-
-    public static final String RATINGS_MAP = "classpath*:WidgetRatingsMap.js";
-    public static final String RATINGS_REDUCE = 
"classpath*:WidgetRatingsReduce.js";
-    public static final String USERS_MAP = "classpath*:WidgetUsersMap.js";
-    public static final String USERS_REDUCE = 
"classpath*:WidgetUsersReduce.js";
+    ///org/apache/rave/WidgetRatingsMap.js
+    public static final String RATINGS_MAP = 
"classpath:/org/apache/rave/WidgetRatingsMap.js";
+    public static final String RATINGS_REDUCE = 
"classpath:/org/apache/rave/WidgetRatingsReduce.js";
+    public static final String USERS_MAP = 
"classpath:/org/apache/rave/WidgetUsersMap.js";
+    public static final String USERS_REDUCE = 
"classpath:/org/apache/rave/WidgetUsersReduce.js";
+    public static final String PAGE_COLLECTION = "page";
     @Autowired
     private MongoWidgetOperations template;
 
@@ -63,7 +64,7 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public int getCountAll() {
-        return (int)template.count(new Query());
+        return (int) template.count(new Query());
     }
 
     @Override
@@ -74,18 +75,18 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public int getCountFreeTextSearch(String searchTerm) {
-        return (int)template.count(new Query(getFreeTextClause(searchTerm)));
+        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 query = new 
Query(where("widgetStatus").is(getWidgetStatusString(widgetStatus))).skip(offset).limit(pageSize);
         return template.find(addSort(query));
     }
 
     @Override
     public int getCountByStatus(WidgetStatus widgetStatus) {
-        return (int)template.count(new 
Query(where("widgetStatus").is(widgetStatus)));
+        return (int) template.count(new 
Query(where("widgetStatus").is(getWidgetStatusString(widgetStatus))));
     }
 
     @Override
@@ -96,7 +97,7 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public int getCountByStatusAndTypeAndFreeText(WidgetStatus widgetStatus, 
String type, String searchTerm) {
-        return (int)template.count(getWidgetStatusFreeTextQuery(widgetStatus, 
type, searchTerm));
+        return (int) template.count(getWidgetStatusFreeTextQuery(widgetStatus, 
type, searchTerm));
     }
 
     @Override
@@ -107,7 +108,7 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public int getCountByOwner(User owner, int offset, int pageSize) {
-        return (int)template.count(getQueryByOwner(owner));
+        return (int) template.count(getQueryByOwner(owner));
     }
 
     @Override
@@ -117,10 +118,11 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public WidgetStatistics getWidgetStatistics(long widget_id, long user_id) {
-        Query query = query(where("widgetId").is(widget_id));
+        Query query = query(where("widgetId").is(widget_id).andOperator());
         MapReduceResults<WidgetRatingsMapReduceResult> widgetStats = 
template.mapReduce(query, RATINGS_MAP, RATINGS_REDUCE, 
WidgetRatingsMapReduceResult.class);
-        MapReduceResults<WidgetUsersMapReduceResult> widgetUsers = 
template.mapReduce(query, USERS_MAP, USERS_REDUCE, 
WidgetUsersMapReduceResult.class);
-        if(widgetStats.getCounts().getOutputCount() != 1 || 
widgetUsers.getCounts().getOutputCount() != 1) {
+        MapReduceResults<WidgetUsersMapReduceResult> widgetUsers = 
template.mapReduce(PAGE_COLLECTION, query, USERS_MAP, USERS_REDUCE, 
WidgetUsersMapReduceResult.class);
+
+        if (widgetStats.getCounts().getOutputCount() > 1 || 
widgetUsers.getCounts().getOutputCount() > 1) {
             throw new IllegalStateException("Invalid results returned from 
Map/Reduce");
         }
         WidgetRatingsMapReduceResult statsResult = 
widgetStats.iterator().next();
@@ -131,23 +133,16 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public Map<Long, WidgetStatistics> getAllWidgetStatistics(long userId) {
+        //query argument ignores widgets
         MapReduceResults<WidgetRatingsMapReduceResult> widgetStats = 
template.mapReduce(RATINGS_MAP, RATINGS_REDUCE, 
WidgetRatingsMapReduceResult.class);
-        Map<Long, Long> usersMap = 
mapUsersResults(template.mapReduce(USERS_MAP, USERS_REDUCE, 
WidgetUsersMapReduceResult.class));
+        Map<Long, Long> usersMap = mapUsersResults(template.mapReduce("page", 
USERS_MAP, USERS_REDUCE, WidgetUsersMapReduceResult.class));
         Map<Long, WidgetStatistics> stats = Maps.newHashMap();
-        for(WidgetRatingsMapReduceResult result : widgetStats) {
+        for (WidgetRatingsMapReduceResult result : widgetStats) {
             stats.put(result.getWidgetId(), 
createWidgetStatisticsFromResults(userId, result, usersMap.get(userId)));
         }
         return stats;
     }
 
-    private Map<Long, Long> 
mapUsersResults(MapReduceResults<WidgetUsersMapReduceResult> 
widgetUsersMapReduceResults) {
-        Map<Long, Long> map = Maps.newHashMap();
-        for(WidgetUsersMapReduceResult result : widgetUsersMapReduceResults) {
-            map.put(result.getWidgetId(), result.getUsers());
-        }
-        return map;
-    }
-
     @Override
     public Map<Long, WidgetRating> getUsersWidgetRatings(long userId) {
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
@@ -160,7 +155,7 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public int getCountByTag(String tagKeyword) {
-        return (int)template.count(getTagQuery(tagKeyword));
+        return (int) template.count(getTagQuery(tagKeyword));
     }
 
     @Override
@@ -190,7 +185,7 @@ public class MongoDbWidgetRepository imp
     }
 
     private Query getWidgetStatusFreeTextQuery(WidgetStatus widgetStatus, 
String type, String searchTerm) {
-        return new Query(where("widgetStatus").is(widgetStatus)
+        return new 
Query(where("widgetStatus").is(getWidgetStatusString(widgetStatus))
                 .andOperator(where("type").is(type))
                 .andOperator(getFreeTextClause(searchTerm))
         );
@@ -209,15 +204,32 @@ public class MongoDbWidgetRepository imp
         return 
query(where("tags").elemMatch(where("tag.keyword").is(tagKeyWord)));
     }
 
+    private Map<Long, Long> 
mapUsersResults(MapReduceResults<WidgetUsersMapReduceResult> 
widgetUsersMapReduceResults) {
+        Map<Long, Long> map = Maps.newHashMap();
+        if (widgetUsersMapReduceResults != null) {
+            for (WidgetUsersMapReduceResult result : 
widgetUsersMapReduceResults) {
+                map.put(result.getWidgetId(), result.getUsers());
+            }
+        }
+        return map;
+    }
+
     private WidgetStatistics createWidgetStatisticsFromResults(long user_id, 
WidgetRatingsMapReduceResult statsResult, Long userResult) {
         WidgetStatistics statistics = new WidgetStatistics();
-        
statistics.setTotalDislike(statsResult.getStatistics().getDislike().intValue());
-        
statistics.setTotalLike(statsResult.getStatistics().getLike().intValue());
-        
statistics.setUserRating(statsResult.getStatistics().getUserRatings().containsKey(user_id)
 ? statsResult.getStatistics().getUserRatings().get(user_id).intValue() : -1);
+        WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult result = 
statsResult.getStatistics();
+        if (result != null) {
+            statistics.setTotalDislike(result.getDislike().intValue());
+            statistics.setTotalLike(result.getLike().intValue());
+            
statistics.setUserRating(result.getUserRatings().containsKey(user_id) ? 
result.getUserRatings().get(user_id).intValue() : -1);
+        }
         statistics.setTotalUserCount(userResult == null ? 0 : 
userResult.intValue());
         return statistics;
     }
 
+    private String getWidgetStatusString(WidgetStatus widgetStatus) {
+        return widgetStatus.getWidgetStatus().toUpperCase();
+    }
+
     private Query addSort(Query query) {
         query.sort().on("title", Order.ASCENDING);
         return query;

Modified: 
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=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoModelTemplate.java
 Tue Oct 23 21:12:29 2012
@@ -25,6 +25,7 @@ import org.apache.rave.portal.repository
 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.mapreduce.MapReduceResults;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Update;
 
@@ -93,6 +94,26 @@ public class MongoModelTemplate<T, E ext
         return result.getN();
     }
 
+    @Override
+    public <E> MapReduceResults<E> mapReduce(String mapFunction, String 
reduceFunction, Class<E> entityClass) {
+        return mapReduce(collection, mapFunction, reduceFunction, entityClass);
+    }
+
+    @Override
+    public <E> MapReduceResults<E> mapReduce(String collection, String 
mapFunction, String reduceFunction, Class<E> entityClass) {
+       return mongoTemplate.mapReduce(collection, mapFunction, reduceFunction, 
entityClass);
+    }
+
+    @Override
+    public <E> MapReduceResults<E> mapReduce(Query query, String mapFunction, 
String reduceFunction, Class<E> entityClass) {
+        return mapReduce(collection, query, mapFunction, reduceFunction, 
entityClass);
+    }
+
+    @Override
+    public <E> MapReduceResults<E> mapReduce(String collection, Query query, 
String mapFunction, String reduceFunction, Class<E> entityClass) {
+        return mongoTemplate.mapReduce(query, collection, mapFunction, 
reduceFunction, entityClass);
+    }
+
     private List<T> hydrate(List<E> mongoDbTs) {
         for(E p : mongoDbTs) {
             hydrate(p);

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsMap.js
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsMap.js?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsMap.js
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsMap.js
 Tue Oct 23 21:12:29 2012
@@ -16,15 +16,17 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-function() {
-    for(var i=0; i<this.ratings.length; i++) {
-        var rating = this.ratings[i];
-        emit(this._id, {
-             widgetId : this._id,
-             statistics: {
-                like : rating.score == 10 ? 1 : 0,
-                dislike : rating.score == 0 ? 1: 0,
-                userRating : { userId: this.userId, value: rating.score }
-        }});
+function () {
+    if (this.ratings) {
+        for (var i = 0; i < this.ratings.length; i++) {
+            var rating = this.ratings[i];
+            emit(this._id, {
+                widgetId:this._id,
+                statistics:{
+                    like:rating.score == 10 ? 1 : 0,
+                    dislike:rating.score == 0 ? 1 : 0,
+                    userRating:{ userId:this.userId, value:rating.score }
+                }});
+        }
     }
 }

Modified: 
rave/branches/mongo/rave-portal-resources/src/main/resources/initial-data.json
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-portal-resources/src/main/resources/initial-data.json?rev=1401484&r1=1401483&r2=1401484&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-portal-resources/src/main/resources/initial-data.json 
(original)
+++ 
rave/branches/mongo/rave-portal-resources/src/main/resources/initial-data.json 
Tue Oct 23 21:12:29 2012
@@ -912,7 +912,7 @@
         "description": "A Wikipedia Search and Go widget. Language choice.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 2,
@@ -925,7 +925,7 @@
         "description": "Google Translation gadget.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 3,
@@ -934,7 +934,7 @@
         "type": "OpenSocial",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 4,
@@ -943,7 +943,7 @@
         "type": "OpenSocial",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 5,
@@ -952,7 +952,7 @@
         "type": "OpenSocial",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 6,
@@ -963,7 +963,7 @@
         "description": "A cute little hamster for you to feed and look after. 
Watch him follow your cursor around. Click on the more tab to treat him to a 
strawberry. Click him then put him on the wheel and watch him play! ***NEW: 
make Herbie hamster your very own!",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 7,
@@ -974,7 +974,7 @@
         "description": "This is a gadget developed for Teragrid - OGCE 
project. Used Google gadgets API to retrieve the information from the 
Information Services REST Web Service and display the information using Google 
Maps API. This is a list of available CTSS resources and its details",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 8,
@@ -985,7 +985,7 @@
         "description": "Fully functional, lightweight, AJAX-based twitter user 
interface with many configuration options including user specified auto-refresh 
rate, full timeline, pagination, and more.  Control display elements such as 
user thumbnails, date stamps, and post source.  Specify gadget size based on 
availble screen footprint, even incorporate into your Gmail account.  Insert 
symbols, dingbats and emoticons into your tweets using the TwitterGadget 
Symbols pulldown menu.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 9,
@@ -996,7 +996,7 @@
         "description": "A search module, which searches YouTube by tags like 
Politics News Life Music Family Photography Art Random Travel Personal Religion 
Movies Business Thoughts Media Humor Culture Poetry Christmas Writing Books 
Food Friends.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 10,
@@ -1007,7 +1007,7 @@
         "description": "A demo gadget to show open views popups in action.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 11,
@@ -1016,7 +1016,7 @@
         "type": "OpenSocial",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 12,
@@ -1027,7 +1027,7 @@
         "description": "An example gadget which demos some of the different 
capabilities of user preferences.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 13,
@@ -1038,7 +1038,7 @@
         "description": "Static widget of activities for demoing on the Person 
Profile page",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 14,
@@ -1049,7 +1049,7 @@
         "description": "Static widget of a schedule for demoing on the Person 
Profile page",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 15,
@@ -1060,7 +1060,7 @@
         "description": "Static widget of favorite websites for demoing on the 
Person Profile page",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 16,
@@ -1071,7 +1071,7 @@
         "description": "Static widget of groups for demoing on the Person 
Profile page",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 17,
@@ -1082,7 +1082,7 @@
         "description": "Static widget of experience for demoing on the Person 
Profile page",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 18,
@@ -1093,7 +1093,7 @@
         "description": "Sample Activity Streams gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 19,
@@ -1104,7 +1104,7 @@
         "description": "Sample Embedded Experience gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 20,
@@ -1115,7 +1115,7 @@
         "description": "Sample Embedded Experience gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 21,
@@ -1126,7 +1126,7 @@
         "description": "Sample Facebook gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 22,
@@ -1137,7 +1137,7 @@
         "description": "Ohloh is an open source network that connects people 
through the software they create and use. Ohloh gadgets provide detailed 
statistics about open source software projects and developers.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 23,
@@ -1148,7 +1148,7 @@
         "description": "Ohloh is an open source network that connects people 
through the software they create and use. Ohloh gadgets provide detailed 
statistics about open source software projects and developers.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 24,
@@ -1159,7 +1159,7 @@
         "description": "Ohloh is an open source network that connects people 
through the software they create and use. Ohloh gadgets provide detailed 
statistics about open source software projects and developers.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 25,
@@ -1170,7 +1170,7 @@
         "description": "Ohloh is an open source network that connects people 
through the software they create and use. Ohloh gadgets provide detailed 
statistics about open source software projects and developers.",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 26,
@@ -1181,7 +1181,7 @@
         "description": "OpenAJAX Hub publisher gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 27,
@@ -1192,7 +1192,7 @@
         "description": "OpenAJAX Hub subscriber gadget from Shindig",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     },
     {
         "id" : 28,
@@ -1203,7 +1203,7 @@
         "description": "This gadget display the list of friends for a 
particular user",
         "disableRendering": false,
         "featured": false,
-        "status": "PUBLISHED"
+        "widgetStatus": "PUBLISHED"
     }
 ],
     "authorities": [


Reply via email to