Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r453898dc3e1802c2280217b914be130fd19fe4d5 -r1af47d73988107c29a5a32920b50080ceade5453 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/util/AlphanumComparator.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r1af47d73988107c29a5a32920b50080ceade5453 --- lams_common/src/java/org/lamsfoundation/lams/util/AlphanumComparator.java (.../AlphanumComparator.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_common/src/java/org/lamsfoundation/lams/util/AlphanumComparator.java (.../AlphanumComparator.java) (revision 1af47d73988107c29a5a32920b50080ceade5453) @@ -49,41 +49,13 @@ * */ public class AlphanumComparator implements Comparator { - private final boolean isDigit(char ch) { - return ch >= 48 && ch <= 57; - } - /** Length of string is passed in for improved efficiency (only need to calculate it once) **/ - private final String getChunk(String s, int slength, int marker) { - StringBuilder chunk = new StringBuilder(); - char c = s.charAt(marker); - chunk.append(c); - marker++; - if (isDigit(c)) { - while (marker < slength) { - c = s.charAt(marker); - if (!isDigit(c)) { - break; - } - chunk.append(c); - marker++; - } - } else { - while (marker < slength) { - c = s.charAt(marker); - if (isDigit(c)) { - break; - } - chunk.append(c); - marker++; - } - } - return chunk.toString(); - } - @Override public int compare(String s1, String s2) { - + return compareAlphnumerically(s1, s2); + } + + public static int compareAlphnumerically(String s1, String s2) { int thisMarker = 0; int thatMarker = 0; int s1Length = s1.length(); @@ -122,4 +94,36 @@ return s1Length - s2Length; } + + private final static boolean isDigit(char ch) { + return ch >= 48 && ch <= 57; + } + + /** Length of string is passed in for improved efficiency (only need to calculate it once) **/ + private static final String getChunk(String s, int slength, int marker) { + StringBuilder chunk = new StringBuilder(); + char c = s.charAt(marker); + chunk.append(c); + marker++; + if (isDigit(c)) { + while (marker < slength) { + c = s.charAt(marker); + if (!isDigit(c)) { + break; + } + chunk.append(c); + marker++; + } + } else { + while (marker < slength) { + c = s.charAt(marker); + if (isDigit(c)) { + break; + } + chunk.append(c); + marker++; + } + } + return chunk.toString(); + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r44a6288b9f1a53517b1cc2d091cd72fac63eb5a5 -r1af47d73988107c29a5a32920b50080ceade5453 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 44a6288b9f1a53517b1cc2d091cd72fac63eb5a5) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 1af47d73988107c29a5a32920b50080ceade5453) @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashSet; @@ -78,6 +79,7 @@ import org.lamsfoundation.lams.tool.assessment.util.SequencableComparator; import org.lamsfoundation.lams.tool.assessment.web.form.ReflectionForm; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.AlphanumComparator; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.ValidationUtil; import org.lamsfoundation.lams.util.WebUtil; @@ -346,9 +348,19 @@ questionDto.setOptionDtos(new LinkedHashSet(shuffledList)); } if (questionDto.getType() == AssessmentConstants.QUESTION_TYPE_MATCHING_PAIRS) { - ArrayList shuffledList = new ArrayList(questionDto.getOptionDtos()); - Collections.shuffle(shuffledList); - questionDto.setMatchingPairOptions(new LinkedHashSet(shuffledList)); + //sort answer options alphanumerically (as per LDEV-4326) + ArrayList optionsSortedByOptionString = new ArrayList( + questionDto.getOptionDtos()); + optionsSortedByOptionString.sort(new Comparator() { + @Override + public int compare(OptionDTO o1, OptionDTO o2) { + String optionString1 = o1.getOptionString() != null ? o1.getOptionString() : ""; + String optionString2 = o2.getOptionString() != null ? o2.getOptionString() : ""; + + return AlphanumComparator.compareAlphnumerically(optionString1, optionString2); + } + }); + questionDto.setMatchingPairOptions(new LinkedHashSet(optionsSortedByOptionString)); } } Index: lams_tool_assessment/web/pages/learning/parts/matchingpairs.jsp =================================================================== diff -u -rc97b41d72e071f6293126bd85f6eba0b756f7836 -r1af47d73988107c29a5a32920b50080ceade5453 --- lams_tool_assessment/web/pages/learning/parts/matchingpairs.jsp (.../matchingpairs.jsp) (revision c97b41d72e071f6293126bd85f6eba0b756f7836) +++ lams_tool_assessment/web/pages/learning/parts/matchingpairs.jsp (.../matchingpairs.jsp) (revision 1af47d73988107c29a5a32920b50080ceade5453) @@ -11,11 +11,17 @@ + - + + + + - ${selectOption.optionString} + + ${selectOption.optionString} +