Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java =================================================================== diff -u -r1307599981af4c3f63c2da571c07e150d4713e8d -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision 1307599981af4c3f63c2da571c07e150d4713e8d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/IRatingDAO.java (.../IRatingDAO.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -137,5 +137,5 @@ /** * Get all the raw ratings for a combination of criteria and item ids. Used by Peer Review to do SPA analysis. */ - List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds); + List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java =================================================================== diff -u -r1307599981af4c3f63c2da571c07e150d4713e8d -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision 1307599981af4c3f63c2da571c07e150d4713e8d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/dao/hibernate/RatingDAO.java (.../RatingDAO.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -395,8 +395,8 @@ * Get all the raw ratings for a combination of criteria and item ids. Used by Peer Review to do SPA analysis. */ @Override - public List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds) { - return getSession().createQuery(FIND_RATINGS_BY_ITEM_CRITERIA) + public List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds) { + return getSession().createQuery(FIND_RATINGS_BY_ITEM_CRITERIA, Rating.class) .setParameterList("ratingCriteriaIds", ratingCriteriaIds).setParameterList("itemIds", itemIds).list(); } Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java =================================================================== diff -u -r0b25275e793528d944a724b2ccd4d5a87202f11f -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision 0b25275e793528d944a724b2ccd4d5a87202f11f) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/IRatingService.java (.../IRatingService.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -222,7 +222,7 @@ /** * Get all the raw ratings for a combination of criteria and item ids. Used by Peer Review to do SPA analysis. */ - List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds); + List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds); List getCommentsByCriteriaAndItem(Long ratingCriteriaId, Long toolSessionId, Long itemId); Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java =================================================================== diff -u -rec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision ec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -852,7 +852,7 @@ * Get all the raw ratings for a combination of criteria and item ids. Used by Peer Review to do SPA analysis. */ @Override - public List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds) { + public List getRatingsByCriteriasAndItems(Collection ratingCriteriaIds, Collection itemIds) { return ratingDAO.getRatingsByCriteriasAndItems(ratingCriteriaIds, itemIds); } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -rec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision ec21ca839bfcba1bb6d6b45276c39a0cc3cb2f3d) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -33,10 +33,12 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -53,6 +55,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rating.dto.ItemRatingDTO; import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; +import org.lamsfoundation.lams.rating.dto.StyledRatingDTO; import org.lamsfoundation.lams.rating.model.LearnerItemRatingCriteria; import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.model.RatingRubricsColumn; @@ -355,6 +358,27 @@ return ratingService.convertToStyledDTO(criteria, currentUserId, getAllUsers, null); } + if (criteria.isRubricsStyleRating() && !getByUser) { + // for rubrics we need every answer, not just aggregation + StyledCriteriaRatingDTO dto = new StyledCriteriaRatingDTO(); + dto.setRatingCriteria(criteria); + List ratingDtos = ratingService + .getRatingsByCriteriasAndItems(Set.of(criteria.getRatingCriteriaId()), Set.of(currentUserId)) + .stream() + .filter(rating -> getAllUsers || !rating.getLearner().getUserId().equals(currentUserId.intValue())) + .collect(Collectors.mapping(rating -> { + StyledRatingDTO ratingDto = new StyledRatingDTO(currentUserId); + if (rating.getRating() != null) { + ratingDto.setUserRating(String.valueOf(rating.getRating().intValue())); + } + ratingDto.setItemDescription(rating.getLearner().getFullName()); + return ratingDto; + }, Collectors.toList())); + + dto.setRatingDtos(ratingDtos); + return dto; + } + List rawData = peerreviewUserDao.getRatingsComments(toolContentId, toolSessionId, criteria, currentUserId, null, null, sorting, searchString, getByUser, !getByUser || getAllUsers, ratingService, userManagementService); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java =================================================================== diff -u -reb224b1b9cb0c9ec32783ba1a98ecfbdf5ad7b12 -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java (.../EmailAnalysisBuilder.java) (revision eb224b1b9cb0c9ec32783ba1a98ecfbdf5ad7b12) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java (.../EmailAnalysisBuilder.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -303,10 +303,9 @@ } HashMap> tally = new HashMap<>(); if (criteriaIds.size() > 0) { - List rawRatingsForSession = ratingService.getRatingsByCriteriasAndItems(criteriaIds, + List rawRatingsForSession = ratingService.getRatingsByCriteriasAndItems(criteriaIds, learnerDataMap.keySet()); - for (Object obj : rawRatingsForSession) { - Rating rating = (Rating) obj; + for (Rating rating : rawRatingsForSession) { SummingData sd = null; Long itemId = rating.getItemId(); HashMap itemMap = tally.get(itemId); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java =================================================================== diff -u -r368e89de24de1175cd9fa7cb6298d66f92948059 -re71845f3bb0d02540f9c16bcc783a71ee924de51 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java (.../LearningController.java) (revision 368e89de24de1175cd9fa7cb6298d66f92948059) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java (.../LearningController.java) (revision e71845f3bb0d02540f9c16bcc783a71ee924de51) @@ -25,6 +25,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -33,6 +34,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -398,7 +400,15 @@ ? new ArrayList<>(ratingCriterias.size()) : null; + Set processedCriteriaGroups = new HashSet<>(); for (RatingCriteria criteria : ratingCriterias) { + if (criteria.getRatingCriteriaGroupId() != null) { + if (processedCriteriaGroups.contains(criteria.getRatingCriteriaGroupId())) { + continue; + } + processedCriteriaGroups.add(criteria.getRatingCriteriaGroupId()); + } + boolean showAllUsers = peerreview.isSelfReview() || criteria.isRankingStyleRating() || criteria.isHedgeStyleRating() || (mode != null && mode.isTeacher()); @@ -407,15 +417,29 @@ : PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; if (allUsersDtos != null) { - allUsersDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, - criteria, user.getUserId(), false, sorting, null, showAllUsers, true)); + Function dtoBuilder = c -> service + .getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, c, + user.getUserId(), false, sorting, null, showAllUsers, true); + + // for rubrics there is a single dto (first row) with list of all rows (including first) filled + StyledCriteriaRatingDTO dto = criteria.isRubricsStyleRating() + ? fillCriteriaGroup(criteria, ratingCriterias, dtoBuilder) + : dtoBuilder.apply(criteria); + allUsersDtos.add(dto); } if (currentUserDtos != null) { - currentUserDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, - criteria, user.getUserId(), false, sorting, null, showAllUsers, false)); - } + Function dtoBuilder = c -> service + .getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, c, + user.getUserId(), false, sorting, null, + showAllUsers && !criteria.isRubricsStyleRating(), false); + // for rubrics there is a single dto (first row) with list of all rows (including first) filled + StyledCriteriaRatingDTO dto = criteria.isRubricsStyleRating() + ? fillCriteriaGroup(criteria, ratingCriterias, dtoBuilder) + : dtoBuilder.apply(criteria); + currentUserDtos.add(dto); + } } if (allUsersDtos != null) { @@ -534,22 +558,10 @@ if (criteria.isRubricsStyleRating()) { List criterias = service.getRatingCriterias(peerreview.getContentId()); - - Integer groupId = criteria.getRatingCriteriaGroupId(); - List criteriaGroup = new LinkedList<>(); - for (RatingCriteria criteriaInGroup : criterias) { - if (!groupId.equals(criteriaInGroup.getRatingCriteriaGroupId())) { - continue; - } - StyledCriteriaRatingDTO dto = service.getUsersRatingsCommentsByCriteriaIdDTO(toolContentId, - toolSessionId, criteriaInGroup, userId, false, PeerreviewConstants.SORT_BY_USERNAME_ASC, null, - peerreview.isSelfReview(), true); - criteriaGroup.add(dto); - } - - criteriaDto = criteriaGroup.get(0); - criteriaDto.setCriteriaGroup(criteriaGroup); - + criteriaDto = fillCriteriaGroup(criteria, criterias, + entryCriteria -> service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), + toolSessionId, entryCriteria, userId, false, PeerreviewConstants.SORT_BY_USERNAME_ASC, null, + peerreview.isSelfReview(), true)); } else { criteriaDto = service.getUsersRatingsCommentsByCriteriaIdDTO(toolContentId, toolSessionId, criteria, userId, (criteria.isCommentRating() || criteria.isStarStyleRating()), @@ -918,4 +930,25 @@ return finish(request, session); } + private StyledCriteriaRatingDTO fillCriteriaGroup(RatingCriteria targetCriteria, + Collection allCriteria, Function dtoProducer) { + Integer groupId = targetCriteria.getRatingCriteriaGroupId(); + StyledCriteriaRatingDTO result = null; + List criteriaGroup = new LinkedList<>(); + for (RatingCriteria criteriaInGroup : allCriteria) { + if (!groupId.equals(criteriaInGroup.getRatingCriteriaGroupId())) { + continue; + } + + StyledCriteriaRatingDTO dto = dtoProducer.apply(criteriaInGroup); + if (criteriaInGroup.getRatingCriteriaId().equals(targetCriteria.getRatingCriteriaId())) { + criteriaGroup.add(0, dto); + result = dto; + result.setCriteriaGroup(criteriaGroup); + } else { + criteriaGroup.add(dto); + } + } + return result; + } }