Author: mfranklin
Date: Tue Oct 16 19:14:29 2012
New Revision: 1398933

URL: http://svn.apache.org/viewvc?rev=1398933&view=rev
Log:
Added widget rating repository

Added:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRatingRepository.java
Modified:
    
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetCommentRepository.java

Modified: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetCommentRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetCommentRepository.java?rev=1398933&r1=1398932&r2=1398933&view=diff
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetCommentRepository.java
 (original)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetCommentRepository.java
 Tue Oct 16 19:14:29 2012
@@ -105,7 +105,6 @@ public class MongoDbWidgetCommentReposit
 
     private int updateWidget(Long userId, Widget widget) {
         int count = 0;
-        boolean updated =false;
 
         Iterator<WidgetComment> iterator = widget.getComments().iterator();
         while(iterator.hasNext()) {
@@ -113,10 +112,9 @@ public class MongoDbWidgetCommentReposit
             if(comment.getUser().getId().equals(userId)) {
                 iterator.remove();
                 count++;
-                updated = true;
             }
         }
-        if(updated) {
+        if(count > 0) {
             template.save(widget);
         }
         return count;

Added: 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRatingRepository.java
URL: 
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRatingRepository.java?rev=1398933&view=auto
==============================================================================
--- 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRatingRepository.java
 (added)
+++ 
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbWidgetRatingRepository.java
 Tue Oct 16 19:14:29 2012
@@ -0,0 +1,150 @@
+/*
+ * 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.Widget;
+import org.apache.rave.portal.model.WidgetRating;
+import org.apache.rave.portal.repository.MongoModelOperations;
+import org.apache.rave.portal.repository.WidgetRatingRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static org.apache.rave.portal.model.util.MongoDbModelUtil.generateId;
+import static org.springframework.data.mongodb.core.query.Criteria.where;
+import static org.springframework.data.mongodb.core.query.Query.query;
+
+public class MongoDbWidgetRatingRepository implements WidgetRatingRepository {
+
+    @Autowired
+    private MongoModelOperations.MongoWidgetOperations template;
+
+    @Override
+    public WidgetRating getByWidgetIdAndUserId(Long widgetId, Long userId) {
+        Widget widget = template.get(widgetId);
+        return getRatingByUserId(widget, userId);
+    }
+
+    @Override
+    public int deleteAll(Long userId) {
+        int count = 0;
+        List<Widget> widgets = 
template.find(query(where("ratings").elemMatch(where("userId").is(userId))));
+        for (Widget widget : widgets) {
+            count += updateWidgetRating(userId, widget);
+        }
+        return count;
+    }
+
+    @Override
+    public Class<? extends WidgetRating> getType() {
+        return WidgetRating.class;
+    }
+
+    @Override
+    public WidgetRating get(long id) {
+        Widget widget = 
template.findOne(query(where("ratings").elemMatch(where("_id").is(id))));
+        return getWidgetRatingById(widget, id);
+    }
+
+    @Override
+    public WidgetRating save(WidgetRating item) {
+        Widget widget = template.get(item.getWidgetId());
+        if (item.getId() == null) {
+            item.setId(generateId());
+            widget.getRatings().add(item);
+        } else {
+            updateRating(widget, item);
+        }
+        Widget saved = template.save(widget);
+        return getRatingById(saved, item.getId());
+    }
+
+    @Override
+    public void delete(WidgetRating item) {
+        Widget widget = template.get(item.getWidgetId());
+        removeRating(item.getId(), widget);
+        template.save(widget);
+    }
+
+    private void removeRating(Long commentId, Widget widget) {
+        Iterator<WidgetRating> iterator = widget.getRatings().iterator();
+        while(iterator.hasNext()) {
+            WidgetRating comment = iterator.next();
+            if(comment.getId().equals(commentId)) {
+                iterator.remove();
+                return;
+            }
+        }
+    }
+
+    private void updateRating(Widget widget, WidgetRating item) {
+        for(WidgetRating rating : widget.getRatings()) {
+            if(rating.getId().equals(item.getId())) {
+                rating.setUserId(item.getUserId());
+                rating.setScore(item.getScore());
+                return;
+            }
+        }
+    }
+
+    private WidgetRating getWidgetRatingById(Widget widget, long id) {
+        for (WidgetRating rating : widget.getRatings()) {
+            if (rating.getId().equals(id)) {
+                return rating;
+            }
+        }
+        return null;
+    }
+
+    private WidgetRating getRatingById(Widget widget, long id) {
+        for (WidgetRating rating : widget.getRatings()) {
+            if (rating.getId().equals(id)) {
+                return rating;
+            }
+        }
+        return null;
+    }
+
+    private int updateWidgetRating(Long userId, Widget widget) {
+        int count = 0;
+        Iterator<WidgetRating> iterator = widget.getRatings().iterator();
+        while (iterator.hasNext()) {
+            WidgetRating rating = iterator.next();
+            if (rating.getUserId().equals(userId)) {
+                iterator.remove();
+                count++;
+            }
+        }
+        if (count > 0) {
+            template.save(widget);
+        }
+        return count;
+    }
+
+    private WidgetRating getRatingByUserId(Widget widget, Long userId) {
+        for (WidgetRating rating : widget.getRatings()) {
+            if (rating.getUserId().equals(userId)) {
+                return rating;
+            }
+        }
+        return null;
+    }
+}


Reply via email to