Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCriteriaDAO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCriteriaDAO.java (.../IRatingCriteriaDAO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingCriteriaDAO.java (.../IRatingCriteriaDAO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -38,5 +38,21 @@ RatingCriteria getByRatingCriteriaId(Long ratingCriteriaId); RatingCriteria getByRatingCriteriaId(Long ratingCriteriaId, Class clasz); + + /** + * Checks if comments are enabled (i.e. if comments' criteria is available). + * + * @param toolContentId + * @return + */ + boolean isCommentsEnabledForToolContent(Long toolContentId); + + /** + * If comments enabled then there might be commentsMinWords limit set. Returns its value or 0 otherwise. + * + * @param toolContentId + * @return + */ + int getCommentsMinWordsLimitForToolContent(Long toolContentId); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -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; @@ -36,6 +37,8 @@ void saveOrUpdate(Object object); Rating getRating(Long ratingCriteriaId, Integer userId, Long itemId); + + List getRatingsByItem(Long contentId, Long itemId); List getRatingsByUser(Long contentId, Integer userId); @@ -77,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/RatingCriteriaDAO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCriteriaDAO.java (.../RatingCriteriaDAO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingCriteriaDAO.java (.../RatingCriteriaDAO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -36,8 +36,14 @@ public class RatingCriteriaDAO extends LAMSBaseDAO implements IRatingCriteriaDAO { - private static final String FIND_BY_TOOL_CONTENT_ID = "from " + RatingCriteria.class.getName() - + " as r where r.toolContentId=? order by r.orderId asc"; + private static final String FIND_BY_TOOL_CONTENT_ID = "FROM " + RatingCriteria.class.getName() + + " AS r WHERE r.toolContentId=? order by r.orderId asc"; + + private static final String IS_COMMENTS_ENABLED_FOR_TOOL_CONTENT_ID = "SELECT COUNT(*) FROM " + + RatingCriteria.class.getName() + " AS r WHERE r.toolContentId=? AND r.commentsEnabled=1"; + + private static final String GET_COMMENTS_MIN_WORDS_LIMIT_FOR_TOOL_CONTENT_ID = "SELECT r.commentsMinWordsLimit FROM " + + RatingCriteria.class.getName() + " AS r WHERE r.toolContentId=? AND r.commentsEnabled=1"; @Override public void saveOrUpdate(RatingCriteria criteria) { @@ -95,4 +101,19 @@ public RatingCriteria getByRatingCriteriaId(Long ratingCriteriaId, Class clasz) { return (RatingCriteria) super.find(clasz, ratingCriteriaId); } + + @Override + public boolean isCommentsEnabledForToolContent(Long toolContentId) { + List list = super.find(IS_COMMENTS_ENABLED_FOR_TOOL_CONTENT_ID, new Object[] { toolContentId }); + return ((Number) list.get(0)).intValue() == 1; + } + + @Override + public int getCommentsMinWordsLimitForToolContent(Long toolContentId) { + List list = super.find(GET_COMMENTS_MIN_WORDS_LIMIT_FOR_TOOL_CONTENT_ID, new Object[] { toolContentId }); + if (list == null || list.size() == 0) { + return 0; + } + return ((Number) list.get(0)).intValue(); + } } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -27,9 +27,11 @@ import java.text.NumberFormat; 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.LAMSBaseDAO; @@ -48,6 +50,9 @@ private static final String FIND_RATING_BY_CRITERIA_AND_USER = "FROM " + Rating.class.getName() + " AS r where r.ratingCriteria.ratingCriteriaId=? AND r.learner.userId=?"; + + private static final String FIND_RATINGS_BY_ITEM = "FROM " + Rating.class.getName() + + " AS r where r.ratingCriteria.toolContentId=? AND r.itemId=?"; private static final String FIND_RATINGS_BY_USER = "FROM " + Rating.class.getName() + " AS r where r.ratingCriteria.toolContentId=? AND r.learner.userId=?"; @@ -90,7 +95,12 @@ return null; } } - + + @Override + public List getRatingsByItem(Long contentId, Long itemId) { + return super.find(FIND_RATINGS_BY_ITEM, new Object[] { contentId, itemId }); + } + // method is not used at the moment private Rating getRating(Long ratingCriteriaId, Integer userId) { List list = (List) doFind(FIND_RATING_BY_CRITERIA_AND_USER, @@ -172,4 +182,61 @@ 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/ItemRatingCriteriaDTO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingCriteriaDTO.java (.../ItemRatingCriteriaDTO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingCriteriaDTO.java (.../ItemRatingCriteriaDTO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -23,6 +23,8 @@ /* $Id$ */ package org.lamsfoundation.lams.rating.dto; +import java.util.List; + import org.lamsfoundation.lams.rating.model.RatingCriteria; public class ItemRatingCriteriaDTO { @@ -34,7 +36,10 @@ private String userRating; private String averageRating; private String numberOfVotes; - + + //used in case of filling with all rating + private List ratingDtos; + public ItemRatingCriteriaDTO() { } @@ -74,5 +79,13 @@ public void setNumberOfVotes(String numberOfVotes) { this.numberOfVotes = numberOfVotes; } + + public List getRatingDtos() { + return ratingDtos; + } + + public void setRatingDtos(List ratingDtos) { + this.ratingDtos = ratingDtos; + } } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java (.../ItemRatingDTO.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/ItemRatingDTO.java (.../ItemRatingDTO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -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/dto/RatingDTO.java =================================================================== diff -u -rf3be94729c90c7390a6aea11d1886a4b72d96670 -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingDTO.java (.../RatingDTO.java) (revision f3be94729c90c7390a6aea11d1886a4b72d96670) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dto/RatingDTO.java (.../RatingDTO.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -23,59 +23,31 @@ /* $Id$ */ package org.lamsfoundation.lams.rating.dto; -import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.usermanagement.User; public class RatingDTO { - private String userRating; - private String averageRating; - private String numberOfVotes; - private Long itemId; - private RatingCriteria ratingCriteria; + private User learner; - public RatingDTO(String rating, String numberOfVotes) { - this.averageRating = rating; - this.numberOfVotes = numberOfVotes; - } - - public String getUserRating() { - return userRating; - } + private String rating; - public void setUserRating(String userRating) { - this.userRating = userRating; + /** + */ + public User getLearner() { + return learner; } - public String getAverageRating() { - return averageRating; + public void setLearner(User learner) { + this.learner = learner; } - public void setAverageRating(String averageRating) { - this.averageRating = averageRating; + /** + */ + public void setRating(String rating) { + this.rating = rating; } - public String getNumberOfVotes() { - return numberOfVotes; + public String getRating() { + return this.rating; } - - public void setNumberOfVotes(String numberOfVotes) { - this.numberOfVotes = numberOfVotes; - } - - public Long getItemId() { - return itemId; - } - - public void setItemId(Long itemId) { - this.itemId = itemId; - } - - public RatingCriteria getRatingCriteria() { - return ratingCriteria; - } - - public void setRatingCriteria(RatingCriteria ratingCriteria) { - this.ratingCriteria = ratingCriteria; - } - } Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -27,6 +27,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -56,7 +57,21 @@ RatingCriteria getCriteriaByCriteriaId(Long ratingCriteriaId, Class clasz); + /** + * Checks if comments are enabled (i.e. if comments' criteria is available). + * + * @param toolContentId + * @return + */ boolean isCommentsEnabled(Long toolContentId); + + /** + * If comments enabled then there might be commentsMinWords limit set. Returns its value or 0 otherwise. + * + * @param toolContentId + * @return + */ + int getCommentsMinWordsLimit(Long toolContentId); /** * Return Rating by the given itemId and userId. @@ -92,6 +107,15 @@ */ List getRatingCriteriaDtos(Long contentId, Collection itemIds, boolean isCommentsByOtherUsersRequired, Long userId); + + /** + * Returns item DTO with all corresponding ratings and comments. Doesn't contain average and total amount of rates. + * + * @param contentId + * @param itemId + * @return + */ + ItemRatingDTO getRatingCriteriaDtoWithActualRatings(Long contentId, Long itemId); /** * Returns number of images rated by specified user in a current activity. It counts comments as ratings. This @@ -102,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 -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -reedbe41acc3d62789bddce2a78f07d1478726020 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 1c42119baf51e12d0ef19919cb5a266a186d4b7d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision eedbe41acc3d62789bddce2a78f07d1478726020) @@ -26,7 +26,9 @@ package org.lamsfoundation.lams.rating.service; import java.text.NumberFormat; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -43,6 +45,7 @@ import org.lamsfoundation.lams.rating.dto.ItemRatingCriteriaDTO; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; import org.lamsfoundation.lams.rating.dto.RatingCommentDTO; +import org.lamsfoundation.lams.rating.dto.RatingDTO; import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; import org.lamsfoundation.lams.rating.model.Rating; import org.lamsfoundation.lams.rating.model.RatingComment; @@ -80,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) { @@ -139,57 +147,8 @@ boolean isSingleItem = itemIds.size() == 1; Long singleItemId = isSingleItem ? itemIds.iterator().next() : null; - //initialize itemDtos - List itemDtos = new LinkedList(); - for (Long itemId : itemIds) { - ItemRatingDTO itemDto = new ItemRatingDTO(); - itemDto.setItemId(itemId); - itemDtos.add(itemDto); - } - //handle comments criteria - for (RatingCriteria criteria : criterias) { - if (criteria.isCommentsEnabled()) { - Long commentCriteriaId = criteria.getRatingCriteriaId(); - - List commentDtos; - if (isSingleItem) { - commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItem(commentCriteriaId, singleItemId); - - //query DB using itemIds - } else if (isCommentsByOtherUsersRequired) { - commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItems(commentCriteriaId, itemIds); - - // get only comments for current user - } else { - commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItemsAndUser(commentCriteriaId, itemIds, - userId.intValue()); - } - - for (ItemRatingDTO itemDto: itemDtos) { - itemDto.setCommentsEnabled(true); - itemDto.setCommentsCriteriaId(commentCriteriaId); - itemDto.setCommentsMinWordsLimit(criteria.getCommentsMinWordsLimit()); - - //assign commentDtos by the appropriate items - List commentDtosPerItem = new LinkedList(); - for (RatingCommentDTO commentDto: commentDtos) { - if (commentDto.getItemId().equals(itemDto.getItemId())) { - commentDtosPerItem.add(commentDto); - - //fill in commentPostedByUser field - if (commentDto.getUserId().equals(userId)) { - itemDto.setCommentPostedByUser(commentDto); - } - } - } - - itemDto.setCommentDtos(commentDtosPerItem); - } - - break; - } - } + List itemDtos = handleCommentsCriteria(criterias, itemIds, isCommentsByOtherUsersRequired, userId); //get all data from DB List userRatings = ratingDAO.getRatingsByUser(contentId, userId.intValue()); @@ -254,8 +213,123 @@ return itemDtos; } + + /* + * Fetches all required comments from the DB. + */ + private List handleCommentsCriteria(List criterias, Collection itemIds, + boolean isCommentsByOtherUsersRequired, Long userId) { + + boolean isSingleItem = itemIds.size() == 1; + Long singleItemId = isSingleItem ? itemIds.iterator().next() : null; + // initialize itemDtos + List itemDtos = new LinkedList(); + for (Long itemId : itemIds) { + ItemRatingDTO itemDto = new ItemRatingDTO(); + itemDto.setItemId(itemId); + itemDtos.add(itemDto); + } + + //handle comments criteria + for (RatingCriteria criteria : criterias) { + if (criteria.isCommentsEnabled()) { + Long commentCriteriaId = criteria.getRatingCriteriaId(); + + List commentDtos; + if (isSingleItem) { + commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItem(commentCriteriaId, singleItemId); + + //query DB using itemIds + } else if (isCommentsByOtherUsersRequired) { + commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItems(commentCriteriaId, itemIds); + + // get only comments done by the specified user + } else { + commentDtos = ratingCommentDAO.getCommentsByCriteriaAndItemsAndUser(commentCriteriaId, itemIds, + userId.intValue()); + } + + for (ItemRatingDTO itemDto: itemDtos) { + itemDto.setCommentsEnabled(true); + itemDto.setCommentsCriteriaId(commentCriteriaId); + itemDto.setCommentsMinWordsLimit(criteria.getCommentsMinWordsLimit()); + + //assign commentDtos by the appropriate items + List commentDtosPerItem = new LinkedList(); + for (RatingCommentDTO commentDto: commentDtos) { + if (commentDto.getItemId().equals(itemDto.getItemId())) { + commentDtosPerItem.add(commentDto); + + //fill in commentPostedByUser field + if (commentDto.getUserId().equals(userId)) { + itemDto.setCommentPostedByUser(commentDto); + } + } + } + + itemDto.setCommentDtos(commentDtosPerItem); + } + + break; + } + } + + return itemDtos; + } + @Override + public ItemRatingDTO getRatingCriteriaDtoWithActualRatings(Long contentId, Long itemId) { + + NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); + numberFormat.setMaximumFractionDigits(1); + List criterias = getCriteriasByToolContentId(contentId); + + // handle comments criteria + List itemIds = Collections.singletonList(itemId); + boolean isCommentsByOtherUsersRequired = false;// not important as it's not used + Long userId = -1L; // passing impossible user id as there is no need in this info + List itemDtos = handleCommentsCriteria(criterias, itemIds, isCommentsByOtherUsersRequired, + userId); + ItemRatingDTO itemDto = itemDtos.get(0); + + //get all data from DB + List itemRatings = ratingDAO.getRatingsByItem(contentId, itemId); + + // handle all criterias except for comments' one + List criteriaDtos = new LinkedList(); + for (RatingCriteria criteria : criterias) { + Long criteriaId = criteria.getRatingCriteriaId(); + + // comments' criteria are handled earlier, at the beginning of this function + if (criteria.isCommentsEnabled()) { + continue; + } + + ItemRatingCriteriaDTO criteriaDto = new ItemRatingCriteriaDTO(); + criteriaDto.setRatingCriteria(criteria); + List ratingDtos = new ArrayList(); + + //find according to that criteria itemRatings + for (Rating itemRating : itemRatings) { + if (itemRating.getRatingCriteria().getRatingCriteriaId().equals(criteria.getRatingCriteriaId())) { + RatingDTO ratingDto = new RatingDTO(); + String ratingStr = numberFormat.format(itemRating.getRating()); + ratingDto.setRating(ratingStr); + ratingDto.setLearner(itemRating.getLearner()); + ratingDtos.add(ratingDto); + } + } + criteriaDto.setRatingDtos(ratingDtos); + + criteriaDtos.add(criteriaDto); + } + itemDto.setCriteriaDtos(criteriaDtos); + + return itemDto; + } + + @Override public List getCriteriasByToolContentId(Long toolContentId) { List criterias = ratingCriteriaDAO.getByToolContentId(toolContentId); return criterias; @@ -345,17 +419,14 @@ } @Override - public boolean isCommentsEnabled(Long toolContentId) { - //TODO implement as new DAO method without getting all criterias - List criterias = ratingCriteriaDAO.getByToolContentId(toolContentId); - - boolean isCommentsEnabled = false; - for (RatingCriteria criteria : criterias) { - isCommentsEnabled |= criteria.isCommentsEnabled(); - } - - return isCommentsEnabled; + public boolean isCommentsEnabled(Long toolContentId) { + return ratingCriteriaDAO.isCommentsEnabledForToolContent(toolContentId); } + + @Override + public int getCommentsMinWordsLimit(Long toolContentId) { + return ratingCriteriaDAO.getCommentsMinWordsLimitForToolContent(toolContentId); + } /* ********** Used by Spring to "inject" the linked objects ************* */