Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/rating/ToolRatingManager.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/ToolRatingManager.java (.../ToolRatingManager.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/ToolRatingManager.java (.../ToolRatingManager.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -53,30 +53,20 @@ * @param toolContentId */ void saveRatingCriterias(HttpServletRequest request, Collection oldCriterias, Long toolContentId); - - /** - * Returns results for only one item. - * - * @param contentId - * @param itemIds - * @param userId - * @return - */ - ItemRatingDTO getRatingCriteriaDtos(Long contentId, Long itemId, Long userId); /** * Returns results for all items. If result is needed for only one item provide provide it as a single element in a * itemIds list. * * @param contentId * @param itemIds - * @param isAllItemResultsRequested - * is all item results requested. If so it will query DB without using itemIds and instead return all available + * @param isCommentsByOtherUsersRequired + * whether required just comment from the current user or by all users * results. * @param userId * @return */ - List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isAllItemResultsRequested, Long userId); + List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isCommentsByOtherUsersRequired, Long userId); /** * Returns number of images rated by specified user in a current activity. It counts comments as ratings. Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java (.../IRatingCommentDAO.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCommentDAO.java (.../IRatingCommentDAO.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -60,6 +60,9 @@ */ List getCommentsByCriteriaAndItems(Long ratingCriteriaId, Collection itemIds); - RatingComment getRatingComment(Long ratingCriteriaId, Integer userId, Long itemId); + List getCommentsByCriteriaAndItemsAndUser(Long ratingCriteriaId, Collection itemIds, + Integer userId); + + RatingComment getComment(Long ratingCriteriaId, Integer userId, Long itemId); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (.../RatingCommentDAO.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCommentDAO.java (.../RatingCommentDAO.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -45,12 +45,12 @@ + "FROM " + RatingComment.class.getName() + " AS r where r.ratingCriteria.ratingCriteriaId=:ratingCriteriaId AND r.itemId IN (:itemIds)"; + private static final String FIND_COMMENTS_BY_CRITERIA_AND_ITEMS_AND_USER = "SELECT r.itemId, r.learner.userId, r.comment " + + "FROM " + RatingComment.class.getName() + + " AS r where r.ratingCriteria.ratingCriteriaId=:ratingCriteriaId AND r.itemId IN (:itemIds) AND r.learner.userId=:userId"; + private static final String FIND_COMMENTS_BY_CRITERIA = "SELECT r.itemId, r.learner.userId, r.comment " + "FROM " + RatingComment.class.getName() + " AS r where r.ratingCriteria.ratingCriteriaId=?"; - - private static final String FIND_RATING_AVERAGE_BY_CONTENT_ID = "SELECT r.itemId, r.ratingCriteria.ratingCriteriaId, AVG(r.rating), COUNT(*) FROM " - + Rating.class.getName() - + " AS r where r.ratingCriteria.toolContentId=? GROUP BY r.itemId, r.ratingCriteria.ratingCriteriaId"; // private static final String COUNT_COMMENTS_BY_ITEM_AND_USER = "SELECT COUNT(r) FROM " // + RatingComment.class.getName() @@ -75,6 +75,17 @@ } @Override + public List getCommentsByCriteriaAndItemsAndUser(Long ratingCriteriaId, Collection itemIds, + Integer userId) { + + List results = getSession().createQuery(FIND_COMMENTS_BY_CRITERIA_AND_ITEMS_AND_USER) + .setLong("ratingCriteriaId", ratingCriteriaId).setParameterList("itemIds", itemIds) + .setInteger("userId", userId).list(); + + return convertIntoCommentDtos(results); + } + + @Override public List getCommentsByCriteria(Long ratingCriteriaId) { List results = (List) (getHibernateTemplate().find(FIND_COMMENTS_BY_CRITERIA, new Object[] { ratingCriteriaId })); @@ -105,7 +116,7 @@ } @Override - public RatingComment getRatingComment(Long ratingCriteriaId, Integer userId, Long itemId) { + public RatingComment getComment(Long ratingCriteriaId, Integer userId, Long itemId) { List list = getHibernateTemplate().find(FIND_RATING_BY_CRITERIA_AND_USER_AND_ITEM, new Object[] { ratingCriteriaId, userId, itemId }); if (list.size() > 0) { Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -32,16 +32,11 @@ import java.util.Locale; import java.util.Set; -import org.hibernate.HibernateException; -import org.hibernate.Session; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.rating.dao.IRatingDAO; import org.lamsfoundation.lams.rating.dto.ItemRatingCriteriaDTO; import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.RatingComment; -import org.lamsfoundation.lams.rating.model.ToolActivityRatingCriteria; -import org.springframework.orm.hibernate3.HibernateCallback; -import org.springframework.orm.hibernate3.HibernateTemplate; public class RatingDAO extends BaseDAO implements IRatingDAO { @@ -64,7 +59,8 @@ + Rating.class.getName() + " AS r where r.ratingCriteria.toolContentId=? AND r.itemId=? GROUP BY r.ratingCriteria.ratingCriteriaId"; private static final String FIND_RATING_AVERAGE_BY_CONTENT_AND_ITEMS = "SELECT r.itemId, r.ratingCriteria.ratingCriteriaId, AVG(r.rating), COUNT(*) FROM " - + Rating.class.getName() + " AS r where r.ratingCriteria.toolContentId=:contentId AND r.itemId IN (:itemIds) GROUP BY r.ratingCriteria.ratingCriteriaId"; + + Rating.class.getName() + + " AS r where r.ratingCriteria.toolContentId=:contentId AND r.itemId IN (:itemIds) GROUP BY r.itemId, r.ratingCriteria.ratingCriteriaId"; private static final String FIND_RATING_AVERAGE_BY_CONTENT_ID = "SELECT r.itemId, r.ratingCriteria.ratingCriteriaId, AVG(r.rating), COUNT(*) FROM " + Rating.class.getName() Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -85,14 +85,13 @@ * * @param contentId * @param itemIds - * @param isAllItemResultsRequested - * is all item results requested. If so it will query DB without using itemIds and instead return all - * available results. + * @param isCommentsByOtherUsersRequired + * whether required just comment from the current user or by all users * @param userId * @return */ List getRatingCriteriaDtos(Long contentId, Collection itemIds, - boolean isAllItemResultsRequested, Long userId); + boolean isCommentsByOtherUsersRequired, Long userId); /** * Returns number of images rated by specified user in a current activity. It counts comments as ratings. This Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java =================================================================== diff -u -r4df2bc2af266158f87dd885950a21145cb8c752d -r67211f988f584b1d7ade8f88e920d7a56895d485 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 4df2bc2af266158f87dd885950a21145cb8c752d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 67211f988f584b1d7ade8f88e920d7a56895d485) @@ -111,7 +111,7 @@ @Override public void commentItem(RatingCriteria ratingCriteria, Integer userId, Long itemId, String comment) { - RatingComment ratingComment = ratingCommentDAO.getRatingComment(ratingCriteria.getRatingCriteriaId(), userId, + RatingComment ratingComment = ratingCommentDAO.getComment(ratingCriteria.getRatingCriteriaId(), userId, itemId); // persist MessageRating changes in DB @@ -130,7 +130,7 @@ } @Override - public List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isAllItemResultsRequested, Long userId) { + public List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isCommentsByOtherUsersRequired, Long userId) { //initial preparations NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); @@ -157,20 +157,21 @@ commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItem(commentCriteriaId, singleItemId); //query DB using itemIds - } else if (!isAllItemResultsRequested) { + } else if (isCommentsByOtherUsersRequired) { commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItems(commentCriteriaId, itemIds); - - //query DB without specifying itemIds + + // get only comments for current user } else { - commentDtos = ratingCommentDAO.getCommentsByCriteria(commentCriteriaId); + commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItemsAndUser(commentCriteriaId, itemIds, + userId.intValue()); } for (ItemRatingDTO itemDto: itemDtos) { itemDto.setCommentsEnabled(true); itemDto.setCommentsCriteriaId(commentCriteriaId); itemDto.setCommentsMinWordsLimit(criteria.getCommentsMinWordsLimit()); - //sort commentDtos by the item + //assign commentDtos by the appropriate items List commentDtosPerItem = new LinkedList(); for (RatingCommentDTO commentDto: commentDtos) { if (commentDto.getItemId().equals(itemDto.getItemId())) { @@ -197,12 +198,8 @@ itemsStatistics = ratingDAO.getRatingAverageByContentAndItem(contentId, singleItemId); // query DB using itemIds - } else if (!isAllItemResultsRequested) { - itemsStatistics = ratingDAO.getRatingAverageByContentAndItems(contentId, itemIds); - - // query DB without specifying itemIds } else { - itemsStatistics = ratingDAO.getRatingAverageByContent(contentId); + itemsStatistics = ratingDAO.getRatingAverageByContentAndItems(contentId, itemIds); } //handle all criterias except for comments' one