Index: lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java =================================================================== diff -u -r4b94f3e897300b18ddde2da14ac81cff25557952 -rd928f8397a77aae7efcf5b65c50222d2cec053be --- lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision 4b94f3e897300b18ddde2da14ac81cff25557952) +++ lams_common/src/java/org/lamsfoundation/lams/rating/service/RatingService.java (.../RatingService.java) (revision d928f8397a77aae7efcf5b65c50222d2cec053be) @@ -367,12 +367,16 @@ @Override public void saveRatingCriterias(HttpServletRequest request, Collection oldCriterias, Long toolContentId) { + + // different handling for comments - simple tag sets the isCommentsEnabled flag, + // the complex tag sends explicit comment type entry. + boolean explicitCommentTypeFound = false; + // create orderId to RatingCriteria map Map mapOrderIdToRatingCriteria = new HashMap(); for (RatingCriteria ratingCriteriaIter : oldCriterias) { mapOrderIdToRatingCriteria.put(ratingCriteriaIter.getOrderId(), ratingCriteriaIter); } - for ( Map.Entry entry : request.getParameterMap().entrySet()) { log.debug("entry: "+entry.getKey()+" "+entry.getValue()); @@ -398,18 +402,24 @@ maxRating = RatingCriteria.RATING_STYLE_RANKING_DEFAULT_MAX; break; case RatingCriteria.RATING_STYLE_HEDGING: + case RatingCriteria.RATING_STYLE_COMMENT: maxRating = 0; break; } } Integer minRatings = 0; Integer maxRatings = 0; - if ( ratingStyle == RatingCriteria.RATING_STYLE_STAR ) { + if ( ratingStyle == RatingCriteria.RATING_STYLE_STAR || ratingStyle == RatingCriteria.RATING_STYLE_COMMENT ) { minRatings = WebUtil.readIntParam(request, "minimumRates" + i, true); maxRatings = WebUtil.readIntParam(request, "maximumRates" + i, true); + } + + if ( ratingStyle == RatingCriteria.RATING_STYLE_COMMENT ) { + explicitCommentTypeFound = true; } - boolean commentsEnabled = ( ratingStyle != RatingCriteria.RATING_STYLE_COMMENT ? WebUtil.readBooleanParam(request, "enableComments" + i, false) : false ); + + boolean commentsEnabled = ( ratingStyle != RatingCriteria.RATING_STYLE_COMMENT ? WebUtil.readBooleanParam(request, "enableComments" + i, false) : true ); RatingCriteria ratingCriteria = mapOrderIdToRatingCriteria.get(i); if (StringUtils.isNotBlank(criteriaTitle)) { @@ -437,7 +447,7 @@ ratingCriteria.setMinimumRates( minRatings ); ratingCriteria.setMaximumRates( maxRatings ); - ratingCriteriaDAO.saveOrUpdate(ratingCriteria); + ratingCriteriaDAO.saveOrUpdate(ratingCriteria); // !!updatedCriterias.add(ratingCriteria); // delete @@ -447,37 +457,39 @@ } - // ==== handle comments criteria ==== + // ==== handle comments criteria - simple tag support ==== + if ( ! explicitCommentTypeFound ) { + boolean isCommentsEnabled = WebUtil.readBooleanParam(request, "isCommentsEnabled", false); - boolean isCommentsEnabled = WebUtil.readBooleanParam(request, "isCommentsEnabled", false); - // find comments' responsible RatingCriteria - RatingCriteria commentsResponsibleCriteria = null; - for (RatingCriteria ratingCriteriaIter : oldCriterias) { - if (ratingCriteriaIter.isCommentRating()) { - commentsResponsibleCriteria = ratingCriteriaIter; - break; + // find comments' responsible RatingCriteria + RatingCriteria commentsResponsibleCriteria = null; + for (RatingCriteria ratingCriteriaIter : oldCriterias) { + if (ratingCriteriaIter.isCommentRating()) { + commentsResponsibleCriteria = ratingCriteriaIter; + break; + } } - } - // create commentsRatingCriteria if it's required - if (isCommentsEnabled) { - if (commentsResponsibleCriteria == null) { - commentsResponsibleCriteria = new LearnerItemRatingCriteria(); - commentsResponsibleCriteria.setRatingCriteriaTypeId(RatingCriteria.LEARNER_ITEM_CRITERIA_TYPE); - ((LearnerItemRatingCriteria) commentsResponsibleCriteria).setToolContentId(toolContentId); - commentsResponsibleCriteria.setOrderId(0); - commentsResponsibleCriteria.setCommentsEnabled(true); - commentsResponsibleCriteria.setRatingStyle(RatingCriteria.RATING_STYLE_COMMENT); - } + // create commentsRatingCriteria if it's required + if (isCommentsEnabled) { + if (commentsResponsibleCriteria == null) { + commentsResponsibleCriteria = new LearnerItemRatingCriteria(); + commentsResponsibleCriteria.setRatingCriteriaTypeId(RatingCriteria.LEARNER_ITEM_CRITERIA_TYPE); + ((LearnerItemRatingCriteria) commentsResponsibleCriteria).setToolContentId(toolContentId); + commentsResponsibleCriteria.setOrderId(0); + commentsResponsibleCriteria.setCommentsEnabled(true); + commentsResponsibleCriteria.setRatingStyle(RatingCriteria.RATING_STYLE_COMMENT); + } - int commentsMinWordsLimit = WebUtil.readIntParam(request, "commentsMinWordsLimit"); - commentsResponsibleCriteria.setCommentsMinWordsLimit(commentsMinWordsLimit); + int commentsMinWordsLimit = WebUtil.readIntParam(request, "commentsMinWordsLimit"); + commentsResponsibleCriteria.setCommentsMinWordsLimit(commentsMinWordsLimit); - ratingCriteriaDAO.saveOrUpdate(commentsResponsibleCriteria); + ratingCriteriaDAO.saveOrUpdate(commentsResponsibleCriteria); - // delete commentsRatingCriteria if it's not required - } else { - if (commentsResponsibleCriteria != null) { - ratingCriteriaDAO.deleteRatingCriteria(commentsResponsibleCriteria.getRatingCriteriaId()); + // delete commentsRatingCriteria if it's not required + } else { + if (commentsResponsibleCriteria != null) { + ratingCriteriaDAO.deleteRatingCriteria(commentsResponsibleCriteria.getRatingCriteriaId()); + } } } }