Author: mfranklin
Date: Wed Oct 24 18:05:05 2012
New Revision: 1401802

URL: http://svn.apache.org/viewvc?rev=1401802&view=rev
Log:
Updated user query & fixed store bugs

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersMap.js
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersReduce.js
Modified:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbUser.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/impl/MongoDbTagRepository.java
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.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-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsReduce.js

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbUser.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbUser.java?rev=1401802&r1=1401801&r2=1401802&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbUser.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/model/MongoDbUser.java
 Wed Oct 24 18:05:05 2012
@@ -115,12 +115,16 @@ public class MongoDbUser extends UserImp
     }
 
     @Override
-    public boolean equals(Object obj) {
-        if (obj == null || !(obj instanceof User)) {
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof MongoDbUser)) return false;
+
+        MongoDbUser that = (MongoDbUser) o;
+
+        if (this.getId() != null ? !this.getId().equals(that.getId()) : 
that.getId() != null)
             return false;
-        }
-        final User other = (User) obj;
-        return !(this.getId().equals(other.getId()) && (this.getId() == null 
|| !this.getId().equals(other.getId())));
+
+        return true;
     }
 
     @Override

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=1401802&r1=1401801&r2=1401802&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
 Wed Oct 24 18:05:05 2012
@@ -36,7 +36,5 @@ public interface MongoModelOperations<T>
     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/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=1401802&r1=1401801&r2=1401802&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
 Wed Oct 24 18:05:05 2012
@@ -36,7 +36,7 @@ import org.springframework.stereotype.Re
 import java.util.List;
 
 @Repository
-public class MongoDbTagRepository implements TagRepository{
+public class MongoDbTagRepository implements TagRepository {
 
     @Autowired
     private MongoWidgetOperations widgetTemplate;
@@ -45,7 +45,7 @@ public class MongoDbTagRepository implem
     public List<Tag> getAll() {
         List<Widget> widgets = widgetTemplate.find(new Query());
         List<Tag> tags = Lists.newArrayList();
-        for(Widget widget : widgets) {
+        for (Widget widget : widgets) {
             addUniqueTags(tags, widget);
         }
         return tags;
@@ -65,9 +65,10 @@ public class MongoDbTagRepository implem
     @SuppressWarnings("unchecked")
     public List<Tag> getAvailableTagsByWidgetId(Long widgetId) {
         List<Tag> all = getAll();
-        List<Tag> widgetTags= 
getTagsFromWidget(widgetTemplate.get(widgetId).getTags());
+        List<Tag> widgetTags = 
getTagsFromWidget(widgetTemplate.get(widgetId).getTags());
         return ListUtils.subtract(all, widgetTags);
     }
+
     @Override
     public Class<? extends Tag> getType() {
         return Tag.class;
@@ -90,8 +91,10 @@ public class MongoDbTagRepository implem
 
     private List<Tag> getTagsFromWidget(List<WidgetTag> widgetTags) {
         List<Tag> tags = Lists.newArrayList();
-        for(WidgetTag widgetTag : widgetTags) {
-            tags.add(widgetTag.getTag());
+        if (widgetTags != null) {
+            for (WidgetTag widgetTag : widgetTags) {
+                tags.add(widgetTag.getTag());
+            }
         }
         return tags;
     }
@@ -99,11 +102,11 @@ 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;
+        if (widget.getTags() == null) return;
 
-        for(WidgetTag widgetTag : widget.getTags()) {
+        for (WidgetTag widgetTag : widget.getTags()) {
             Tag tag = widgetTag.getTag();
-            if(!tags.contains(tag)) {
+            if (!tags.contains(tag)) {
                 tags.add(tag);
             }
         }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java?rev=1401802&r1=1401801&r2=1401802&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbUserRepository.java
 Wed Oct 24 18:05:05 2012
@@ -19,7 +19,9 @@
 
 package org.apache.rave.portal.repository.impl;
 
+import com.google.common.collect.Lists;
 import org.apache.rave.portal.model.MongoDbUser;
+import org.apache.rave.portal.model.Page;
 import org.apache.rave.portal.model.User;
 import org.apache.rave.portal.repository.MongoUserOperations;
 import org.apache.rave.portal.repository.UserRepository;
@@ -42,6 +44,9 @@ public class MongoDbUserRepository imple
     @Autowired
     private MongoUserOperations template;
 
+    @Autowired
+    private MongoPageTemplate pageTemplate;
+
     @Override
     public User getByUsername(String username) {
         return template.findOne(query(where("username").is(username)));
@@ -80,7 +85,15 @@ public class MongoDbUserRepository imple
 
     @Override
     public List<User> getAllByAddedWidget(long widgetId) {
-        return null;  //TODO COMPLETE
+        Query q = 
query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("widgetId").is(widgetId))));
+        List<Page> pages = pageTemplate.find(q);
+        List<User> users = Lists.newArrayList();
+        for(Page p : pages) {
+            if(!users.contains(p.getOwner())){
+                users.add(p.getOwner());
+            }
+        }
+        return users;
     }
 
     @Override

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=1401802&r1=1401801&r2=1401802&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
 Wed Oct 24 18:05:05 2012
@@ -20,8 +20,10 @@
 package org.apache.rave.portal.repository.impl;
 
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.model.util.WidgetStatistics;
+import org.apache.rave.portal.repository.MongoPageOperations;
 import org.apache.rave.portal.repository.MongoWidgetOperations;
 import org.apache.rave.portal.repository.WidgetRepository;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +35,7 @@ import org.springframework.stereotype.Re
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static org.springframework.data.mongodb.core.query.Criteria.where;
 import static org.springframework.data.mongodb.core.query.Query.query;
@@ -49,9 +52,13 @@ public class MongoDbWidgetRepository imp
     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;
 
+    @Autowired
+    private MongoPageOperations pageTemplate;
+
     @Override
     public List<Widget> getAll() {
         return template.find(addSort(new Query()));
@@ -118,34 +125,52 @@ public class MongoDbWidgetRepository imp
 
     @Override
     public WidgetStatistics getWidgetStatistics(long widget_id, long user_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(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");
+        Query statsQuery = query(where("widgetId").is(widget_id));
+        MapReduceResults<WidgetRatingsMapReduceResult> widgetStats = 
template.mapReduce(statsQuery, RATINGS_MAP, RATINGS_REDUCE, 
WidgetRatingsMapReduceResult.class);
+        List<Page> pages = 
pageTemplate.find(query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("widgetId").is(widget_id)))));
+
+        int userCount = getUserCount(pages).size();
+        switch (widgetStats.getCounts().getOutputCount()) {
+            case 0:
+                WidgetStatistics stats = new WidgetStatistics();
+                stats.setTotalUserCount(userCount);
+                return stats;
+            case 1:
+                WidgetRatingsMapReduceResult statsResult = 
widgetStats.iterator().next();
+                return createWidgetStatisticsFromResults(user_id, statsResult, 
userCount);
+            default:
+                throw new IllegalStateException("Invalid results returned from 
Map/Reduce");
         }
-        WidgetRatingsMapReduceResult statsResult = 
widgetStats.iterator().next();
-        WidgetUsersMapReduceResult userResult = widgetUsers.iterator().next();
-
-        return createWidgetStatisticsFromResults(user_id, statsResult, 
userResult.getUsers());
     }
 
     @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("page", 
USERS_MAP, USERS_REDUCE, WidgetUsersMapReduceResult.class));
+        MapReduceResults<WidgetUsersMapReduceResult> users = 
pageTemplate.mapReduce(USERS_MAP, USERS_REDUCE, 
WidgetUsersMapReduceResult.class);
         Map<Long, WidgetStatistics> stats = Maps.newHashMap();
-        for (WidgetRatingsMapReduceResult result : widgetStats) {
-            stats.put(result.getWidgetId(), 
createWidgetStatisticsFromResults(userId, result, usersMap.get(userId)));
+        if (widgetStats.getCounts().getOutputCount() >0) {
+            Map<Long, Integer> usersMap = mapUsersResults(users);
+            addCombinedStats(userId, widgetStats, usersMap, stats);
+        } else {
+            addUserCount(users, stats);
         }
         return stats;
     }
 
     @Override
     public Map<Long, WidgetRating> getUsersWidgetRatings(long userId) {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+        Query q = 
query(where("ratings").elemMatch(where("userId").is(userId)));
+        List<Widget> widgets = template.find(q);
+        Map<Long, WidgetRating> ratings = Maps.newHashMap();
+        for(Widget widget : widgets) {
+            for(WidgetRating rating : widget.getRatings()) {
+                if(rating.getUserId().equals(userId)) {
+                    ratings.put(widget.getId(), rating);
+                    break;
+                }
+            }
+        }
+        return ratings;
     }
 
     @Override
@@ -184,16 +209,30 @@ public class MongoDbWidgetRepository imp
         template.remove(new Query(where("_id").is(item.getId())));
     }
 
+    private Map<Long, Integer> 
mapUsersResults(MapReduceResults<WidgetUsersMapReduceResult> 
widgetUsersMapReduceResults) {
+        Map<Long, Integer> map = Maps.newHashMap();
+        for(WidgetUsersMapReduceResult result : widgetUsersMapReduceResults) {
+            if(result.getId() != null) {
+                map.put(result.getId(), result.getValue().size());
+            }
+        }
+        return map;
+    }
+
     private Query getWidgetStatusFreeTextQuery(WidgetStatus widgetStatus, 
String type, String searchTerm) {
-        return new 
Query(where("widgetStatus").is(getWidgetStatusString(widgetStatus))
-                .andOperator(where("type").is(type))
-                .andOperator(getFreeTextClause(searchTerm))
-        );
+        Criteria criteria = getFreeTextClause(searchTerm);
+        if(type != null) {
+            criteria.andOperator(where("type").is(type));
+        }
+        if(widgetStatus != null) {
+            
criteria.andOperator(where("widgetStatus").is(getWidgetStatusString(widgetStatus)));
+        }
+        return query(criteria);
     }
 
     private Criteria getFreeTextClause(String searchTerm) {
-        String regex = "/" + searchTerm + "/";
-        return where("title").is(regex).orOperator(where("title").is(regex));
+        String regex = ".*" + searchTerm + ".*";
+        return 
where("title").regex(regex).orOperator(where("title").is(regex));
     }
 
     private Query getQueryByOwner(User owner) {
@@ -204,25 +243,30 @@ 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());
-            }
+    private void addUserCount(MapReduceResults<WidgetUsersMapReduceResult> 
users, Map<Long, WidgetStatistics> stats) {
+        for(WidgetUsersMapReduceResult result : users) {
+            WidgetStatistics widgetStatistics = new WidgetStatistics();
+            widgetStatistics.setTotalUserCount(result.getValue().size());
+            widgetStatistics.setUserRating(-1);
+            stats.put(result.getId(), widgetStatistics);
+        }
+    }
+
+    private void addCombinedStats(long userId, 
MapReduceResults<WidgetRatingsMapReduceResult> widgetStats, Map<Long, Integer> 
usersMap, Map<Long, WidgetStatistics> stats) {
+        for (WidgetRatingsMapReduceResult result : widgetStats) {
+            stats.put(result.getId(), 
createWidgetStatisticsFromResults(userId, result, 
usersMap.get(result.getId())));
         }
-        return map;
     }
 
-    private WidgetStatistics createWidgetStatisticsFromResults(long user_id, 
WidgetRatingsMapReduceResult statsResult, Long userResult) {
+    private WidgetStatistics createWidgetStatisticsFromResults(long user_id, 
WidgetRatingsMapReduceResult statsResult, int userResult) {
         WidgetStatistics statistics = new WidgetStatistics();
-        WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult result = 
statsResult.getStatistics();
+        WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult result = 
statsResult.getValue();
         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());
+        statistics.setTotalUserCount(userResult);
         return statistics;
     }
 
@@ -235,45 +279,56 @@ public class MongoDbWidgetRepository imp
         return query;
     }
 
+    private Set<Long> getUserCount(List<Page> pages) {
+        Set<Long> set = Sets.newHashSet();
+        for(Page page : pages) {
+            Long id = page.getOwner().getId();
+            if(!set.contains(id)) {
+                set.add(id);
+            }
+        }
+        return set;
+    }
+
     public static class WidgetUsersMapReduceResult {
-        private Long widgetId;
-        private Long users;
+        private Long id;
+        private Map<Long, Long> value;
 
-        public Long getWidgetId() {
-            return widgetId;
+        public Long getId() {
+            return id;
         }
 
-        public void setWidgetId(Long widgetId) {
-            this.widgetId = widgetId;
+        public void setId(Long id) {
+            this.id = id;
         }
 
-        public Long getUsers() {
-            return users;
+        public Map<Long, Long> getValue() {
+            return value;
         }
 
-        public void setUsers(Long users) {
-            this.users = users;
+        public void setValue(Map<Long, Long> value) {
+            this.value = value;
         }
     }
 
     public static class WidgetRatingsMapReduceResult {
-        private Long widgetId;
-        private WidgetStatisticsMapReduceResult statistics;
+        private Long id;
+        private WidgetStatisticsMapReduceResult value;
 
-        public Long getWidgetId() {
-            return widgetId;
+        public Long getId() {
+            return id;
         }
 
-        public void setWidgetId(Long widgetId) {
-            this.widgetId = widgetId;
+        public void setId(Long id) {
+            this.id = id;
         }
 
-        public WidgetStatisticsMapReduceResult getStatistics() {
-            return statistics;
+        public WidgetStatisticsMapReduceResult getValue() {
+            return value;
         }
 
-        public void setStatistics(WidgetStatisticsMapReduceResult statistics) {
-            this.statistics = statistics;
+        public void setValue(WidgetStatisticsMapReduceResult value) {
+            this.value = value;
         }
 
         public static class WidgetStatisticsMapReduceResult {

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=1401802&r1=1401801&r2=1401802&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
 Wed Oct 24 18:05:05 2012
@@ -96,21 +96,11 @@ public class MongoModelTemplate<T, E ext
 
     @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);
+        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);
     }
 

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=1401802&r1=1401801&r2=1401802&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
 Wed Oct 24 18:05:05 2012
@@ -20,13 +20,13 @@ function () {
     if (this.ratings) {
         for (var i = 0; i < this.ratings.length; i++) {
             var rating = this.ratings[i];
+            var userMap = {};
+            userMap[this.userId.floatApprox] = rating.score;
             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 }
-                }});
+                    userRatings:userMap
+                });
         }
     }
 }

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsReduce.js
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsReduce.js?rev=1401802&r1=1401801&r2=1401802&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsReduce.js
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetRatingsReduce.js
 Wed Oct 24 18:05:05 2012
@@ -18,19 +18,17 @@
  */
 function(key, values) {
     var result = {
-        widgetId: key,
-        statistics: {
             like : 0,
             dislike : 0,
             userRatings : {}
-    }};
-    for(var i=0; i< values.length; i++) {
-        result.statistics.totalLike += values[i].totalLike;
-        result.statistics.totalDislike += values[i].totalDislike;
-        for(var userRating in values[i].userRatings) {
-            result.statistics.userRatings[userRating.userId] += 
userRating.value;
+    };
+    values.forEach(function(value) {
+        result.like += value.like;
+        result.dislike += value.dislike;
+        for(var userRating in value.userRatings) {
+            result.userRatings[userRating] += value.userRatings[userRating];
         }
-    }
+    });
     return result;
 
 }

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersMap.js
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersMap.js?rev=1401802&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersMap.js
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersMap.js
 Wed Oct 24 18:05:05 2012
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+function () {
+    var widgetMap = {};
+    var self = this;
+
+    var mapPage = function(page) {
+        if (page.regions) {
+            page.regions.forEach(function(region) {
+                region.regionWidgets.forEach(function(regionWidget) {
+                    if (!widgetMap[regionWidget.widgetId]) {
+                        widgetMap[regionWidget.widgetId] = true;
+                        var userMap = {};
+                        userMap[self.ownerId.floatApprox] = 1;
+                        emit(regionWidget.widgetId, userMap);
+                    }
+                })
+            })
+        }
+    };
+
+    mapPage(this);
+    if(this.subPages) {
+        this.subPages.forEach(function(p){mapPage(p)})
+    }
+}

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersReduce.js
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersReduce.js?rev=1401802&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersReduce.js
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/resources/org/apache/rave/WidgetUsersReduce.js
 Wed Oct 24 18:05:05 2012
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+function (key, values) {
+    var result={};
+    values.forEach(function(item){
+        for(var i in item) {
+            result[i] = item[i];
+        }
+    });
+    return result;
+}


Reply via email to