Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rbd997a0d0ffc3d23099584001434a745c286e6f5 -r3310e8d45579c49d0261682c33ec7d24d0bc65dc --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision bd997a0d0ffc3d23099584001434a745c286e6f5) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3310e8d45579c49d0261682c33ec7d24d0bc65dc) @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; @@ -1492,7 +1493,7 @@ } String name = targetOption.getName(); - name += "\r\n" + answer; + name += AssessmentEscapeUtils.VSA_ANSWER_DELIMITER + answer; targetOption.setName(name); assessmentDao.saveObject(targetOption); @@ -1503,60 +1504,34 @@ return null; } - //removing - if (targetOptionUid.equals(-1L)) { - for (QbOption previousOption : qbQuestion.getQbOptions()) { - if (previousOption.getUid().equals(previousOptionUid)) { - String name = previousOption.getName(); - String[] alternatives = name.split(","); + // moving back to answer queue or moving to another option, so remove from previous option + for (QbOption previousOption : qbQuestion.getQbOptions()) { + if (previousOption.getUid().equals(previousOptionUid)) { + String name = previousOption.getName(); + String[] alternatives = name.split(AssessmentEscapeUtils.VSA_ANSWER_DELIMITER); - StringBuilder nameWithoutUserAnswer = new StringBuilder(); - for (String alternative : alternatives) { - String normalisedAlternative = AssessmentEscapeUtils.normaliseVSAnswer(alternative); - if (!normalisedAlternative.equals(normalisedAnswer)) { - nameWithoutUserAnswer.append(alternative).append("\r\n"); - } - } - if (nameWithoutUserAnswer.length() > 2) { - previousOption.setName(nameWithoutUserAnswer.substring(0, nameWithoutUserAnswer.length() - 2)); - assessmentDao.saveObject(previousOption); - } - break; - } - } - return null; - } - - //moving from one to another - for (QbOption targetOption : qbQuestion.getQbOptions()) { - if (targetOption.getUid().equals(targetOptionUid)) { - String name = targetOption.getName(); - name += "\r\n" + answer; - targetOption.setName(name); - assessmentDao.saveObject(targetOption); + Set nameWithoutUserAnswer = new LinkedHashSet<>(List.of(alternatives)); + nameWithoutUserAnswer.remove(normalisedAnswer); + name = nameWithoutUserAnswer.stream() + .collect(Collectors.joining(AssessmentEscapeUtils.VSA_ANSWER_DELIMITER)); + previousOption.setName(name); break; } } - for (QbOption previousOption : qbQuestion.getQbOptions()) { - if (previousOption.getUid().equals(previousOptionUid)) { - String name = previousOption.getName(); - String[] alternatives = name.split(","); - - StringBuilder nameWithoutUserAnswer = new StringBuilder(); - for (String alternative : alternatives) { - String normalisedAlternative = AssessmentEscapeUtils.normaliseVSAnswer(alternative); - if (!normalisedAlternative.equals(normalisedAnswer)) { - nameWithoutUserAnswer.append(alternative).append("\r\n"); - } + if (!targetOptionUid.equals(-1L)) { + //moving from one to another + for (QbOption targetOption : qbQuestion.getQbOptions()) { + if (targetOption.getUid().equals(targetOptionUid)) { + String name = targetOption.getName(); + name += AssessmentEscapeUtils.VSA_ANSWER_DELIMITER + answer; + targetOption.setName(name); + assessmentDao.saveObject(targetOption); + break; } - previousOption.setName(nameWithoutUserAnswer.length() > 2 - ? nameWithoutUserAnswer.substring(0, nameWithoutUserAnswer.length() - 2) - : ""); - assessmentDao.saveObject(previousOption); - break; } } + return null; } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java =================================================================== diff -u -r970744e51617c0614313597e042767b43f5a7326 -r3310e8d45579c49d0261682c33ec7d24d0bc65dc --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (.../AssessmentEscapeUtils.java) (revision 970744e51617c0614313597e042767b43f5a7326) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/util/AssessmentEscapeUtils.java (.../AssessmentEscapeUtils.java) (revision 3310e8d45579c49d0261682c33ec7d24d0bc65dc) @@ -44,6 +44,7 @@ public static final String VSA_ANSWER_NORMALISE_JAVA_REG_EXP = "\\W"; public static final String VSA_ANSWER_NORMALISE_SQL_REG_EXP = "[^[:alpha:][:alnum:]_]"; + public static final String VSA_ANSWER_DELIMITER = "\r\n"; public static class AssessmentExcelCell { public Object value; @@ -374,7 +375,7 @@ public static Set normaliseVSOption(String option) { return option == null ? Set.of() - : Stream.of(option.split("\r\n")).collect(Collectors + : Stream.of(option.split(VSA_ANSWER_DELIMITER)).collect(Collectors .mapping(answer -> AssessmentEscapeUtils.normaliseVSAnswer(answer), Collectors.toSet())); } } \ No newline at end of file