Index: lams_build/lib/lams/lams.jar =================================================================== RCS file: /usr/local/cvsroot/lams_build/lib/lams/lams.jar,v diff -u -r1.455 -r1.456 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java,v diff -u -r1.6 -r1.7 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java 24 Jul 2015 00:41:39 -0000 1.6 +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java 29 Jul 2015 21:04:37 -0000 1.7 @@ -27,6 +27,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import org.lamsfoundation.lams.rating.dto.ItemRatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; @@ -79,5 +80,15 @@ * @return */ int getCountItemsRatedByUser(final Long toolContentId, final Integer userId); + + /** + * Count how many users rated and commented each item. + * + * @param contentId + * @param itemIds + * @param excludeUserId + * @return + */ + Map countUsersRatedEachItem(final Long contentId, final Collection itemIds, Integer excludeUserId); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java,v diff -u -r1.4 -r1.5 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java 22 May 2015 22:57:22 -0000 1.4 +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java 29 Jul 2015 21:04:37 -0000 1.5 @@ -23,6 +23,7 @@ /* $Id$ */ package org.lamsfoundation.lams.rating.dao.hibernate; +import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -68,7 +69,7 @@ @Override public List getCommentsByCriteriaAndItems(Long ratingCriteriaId, Collection itemIds) { - List results = getSession().createQuery(FIND_COMMENTS_BY_CRITERIA_AND_ITEMS) + List results = (itemIds.isEmpty()) ? new ArrayList() : getSession().createQuery(FIND_COMMENTS_BY_CRITERIA_AND_ITEMS) .setLong("ratingCriteriaId", ratingCriteriaId).setParameterList("itemIds", itemIds).list(); return convertIntoCommentDtos(results); @@ -78,7 +79,7 @@ public List getCommentsByCriteriaAndItemsAndUser(Long ratingCriteriaId, Collection itemIds, Integer userId) { - List results = getSession().createQuery(FIND_COMMENTS_BY_CRITERIA_AND_ITEMS_AND_USER) + List results = (itemIds.isEmpty()) ? new ArrayList() : getSession().createQuery(FIND_COMMENTS_BY_CRITERIA_AND_ITEMS_AND_USER) .setLong("ratingCriteriaId", ratingCriteriaId).setParameterList("itemIds", itemIds) .setInteger("userId", userId).list(); Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java,v diff -u -r1.7 -r1.8 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java 24 Jul 2015 00:41:39 -0000 1.7 +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java 29 Jul 2015 21:04:37 -0000 1.8 @@ -26,10 +26,13 @@ package org.lamsfoundation.lams.rating.dao.hibernate; import java.text.NumberFormat; +import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; @@ -138,8 +141,10 @@ @Override public List getRatingAverageByContentAndItems(Long contentId, Collection itemIds) { - return getSession().createQuery(FIND_RATING_AVERAGE_BY_CONTENT_AND_ITEMS) + List results = (itemIds.isEmpty()) ? new ArrayList() : getSession().createQuery(FIND_RATING_AVERAGE_BY_CONTENT_AND_ITEMS) .setLong("contentId", contentId).setParameterList("itemIds", itemIds).list(); + + return results; } @Override @@ -180,4 +185,60 @@ return unionItemIds.size(); } + + @Override + public Map countUsersRatedEachItem(final Long contentId, final Collection itemIds, Integer excludeUserId) { + + HashMap itemIdToRatedUsersCountMap = new HashMap(); + if (itemIds.isEmpty()) { + return itemIdToRatedUsersCountMap; + } + + // unions don't work in HQL so doing 2 separate DB queries (http://stackoverflow.com/a/3940445) + String FIND_ITEMID_USERID_PAIRS_BY_CONTENT_AND_ITEMS = "SELECT r.itemId, r.learner.userId FROM " + + Rating.class.getName() + + " AS r where r.ratingCriteria.toolContentId=:contentId AND r.itemId IN (:itemIds)"; + + String FIND_ITEMID_USERID_COMMENT_PAIRS_BY_CONTENT_AND_ITEMS = "SELECT comment.itemId, comment.learner.userId FROM " + + RatingComment.class.getName() + + " AS r where comment.ratingCriteria.toolContentId=:contentId AND comment.itemId IN (:itemIds) AND comment.ratingCriteria.commentsEnabled IS TRUE"; + + List ratedItemObjs = getSession().createQuery(FIND_ITEMID_USERID_PAIRS_BY_CONTENT_AND_ITEMS) + .setLong("contentId", contentId).setParameterList("itemIds", itemIds).list(); + + List commentedItemObjs = getSession().createQuery(FIND_ITEMID_USERID_COMMENT_PAIRS_BY_CONTENT_AND_ITEMS) + .setLong("contentId", contentId).setParameterList("itemIds", itemIds).list(); + + for (Long itemId : itemIds) { + HashSet userIds = new HashSet(); + + //put all corresponding userIds into the userIds set + for (Object[] ratedItemObj: ratedItemObjs) { + Long itemIdIter = (Long) ratedItemObj[0]; + Integer userIdIter = (Integer) ratedItemObj[1]; + + if (itemIdIter.equals(itemId)) { + userIds.add(userIdIter); + } + } + + //put all corresponding userIds into the userIds set + for (Object[] commentedItemObj: commentedItemObjs) { + Long itemIdIter = (Long) commentedItemObj[0]; + Integer userIdIter = (Integer) commentedItemObj[1]; + + if (itemIdIter.equals(itemId)) { + userIds.add(userIdIter); + } + } + + //exclude user that is doing comment now + userIds.remove(excludeUserId); + + //count how many userIds is rated and commented item + itemIdToRatedUsersCountMap.put(itemId, new Long(userIds.size())); + } + + return itemIdToRatedUsersCountMap; + } } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java 21 May 2015 23:39:28 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java 29 Jul 2015 21:04:37 -0000 1.2 @@ -39,6 +39,9 @@ private List commentDtos; private RatingCommentDTO commentPostedByUser; + //used only if certain options is ON + private int countUsersRatedEachItem; + public ItemRatingDTO () { commentsEnabled = false; } @@ -98,4 +101,12 @@ public void setCommentPostedByUser(RatingCommentDTO commentPostedByUser) { this.commentPostedByUser = commentPostedByUser; } + + public int getCountUsersRatedEachItem() { + return countUsersRatedEachItem; + } + + public void setCountUsersRatedEachItem(int countUsersRatedEachItem) { + this.countUsersRatedEachItem = countUsersRatedEachItem; + } } Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java,v diff -u -r1.7 -r1.8 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java 24 Jul 2015 00:41:39 -0000 1.7 +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java 29 Jul 2015 21:04:37 -0000 1.8 @@ -27,6 +27,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -125,5 +126,15 @@ * @return */ int getCountItemsRatedByUser(final Long toolContentId, final Integer userId); + + /** + * Count how many users rated and commented each item. + * + * @param contentId + * @param itemIds + * @param excludeUserId + * @return + */ + Map countUsersRatedEachItem(final Long contentId, final Collection itemIds, Integer excludeUserId); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java,v diff -u -r1.7 -r1.8 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java 24 Jul 2015 00:41:39 -0000 1.7 +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java 29 Jul 2015 21:04:37 -0000 1.8 @@ -83,6 +83,11 @@ public int getCountItemsRatedByUser(final Long toolContentId, final Integer userId) { return ratingDAO.getCountItemsRatedByUser(toolContentId, userId); } + + @Override + public Map countUsersRatedEachItem(final Long contentId, final Collection itemIds, Integer excludeUserId) { + return ratingDAO.countUsersRatedEachItem(contentId, itemIds, excludeUserId); + } @Override public void saveOrUpdateRating(Rating rating) {