Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision ce7b5f945e6c184fbf157ed62ea06d5d34968079) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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 =================================================================== diff -u -r67211f988f584b1d7ade8f88e920d7a56895d485 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (.../RatingCommentDAO.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (.../RatingCommentDAO.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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 =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision ce7b5f945e6c184fbf157ed62ea06d5d34968079) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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 =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java (.../ItemRatingDTO.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java (.../ItemRatingDTO.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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 =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision ce7b5f945e6c184fbf157ed62ea06d5d34968079) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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 =================================================================== diff -u -rce7b5f945e6c184fbf157ed62ea06d5d34968079 -r4865d4cfe5d0132047d5b840cb5311b9fbf848fb --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision ce7b5f945e6c184fbf157ed62ea06d5d34968079) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 4865d4cfe5d0132047d5b840cb5311b9fbf848fb) @@ -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) {