Index: lams_common/src/java/org/lamsfoundation/lams/lesson/util/LearnerProgressNameComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_common/src/java/org/lamsfoundation/lams/lesson/util/LearnerProgressNameComparator.java (.../LearnerProgressNameComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/util/LearnerProgressNameComparator.java (.../LearnerProgressNameComparator.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -20,18 +20,17 @@ * **************************************************************** */ - package org.lamsfoundation.lams.lesson.util; import java.util.Comparator; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.usermanagement.User; /** * Compares two learner progress objects, based on user name. * * @author Marcin Cieslak - * */ public class LearnerProgressNameComparator implements Comparator { @@ -44,9 +43,6 @@ return 1; } - String o1Name = o1.getUser().getFirstName() + o1.getUser().getLastName(); - String o2Name = o2.getUser().getFirstName() + o2.getUser().getLastName(); - return o1Name.compareTo(o2Name); + return User.COMPARATOR.compare(o1.getUser(), o2.getUser()); } - -} +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java =================================================================== diff -u -r92525f17be9db4e57a8551ff92d004f319fb4b73 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision 92525f17be9db4e57a8551ff92d004f319fb4b73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -24,7 +24,9 @@ package org.lamsfoundation.lams.usermanagement; import java.io.Serializable; +import java.lang.reflect.Method; import java.time.LocalDateTime; +import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.Iterator; @@ -57,6 +59,7 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.log4j.Logger; import org.hibernate.annotations.LazyCollection; import org.hibernate.annotations.LazyCollectionOption; import org.hibernate.annotations.SortNatural; @@ -67,11 +70,12 @@ import org.lamsfoundation.lams.themes.dto.ThemeDTO; import org.lamsfoundation.lams.usermanagement.dto.UserBasicDTO; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserDetails; import org.lamsfoundation.lams.util.LanguageUtil; @Entity @Table(name = "lams_user") -public class User implements Serializable, Comparable { +public class User implements IUserDetails, Serializable { private static final long serialVersionUID = 8711215689846731994L; @Id @@ -503,11 +507,6 @@ } @Override - public int compareTo(User user) { - return login.compareTo(user.getLogin()); - } - - @Override public int hashCode() { return new HashCodeBuilder().append(getUserId()).toHashCode(); } @@ -536,7 +535,8 @@ return new UserDTO(userId, firstName, lastName, login, languageIsoCode, countryIsoCode, direction, email, theme != null ? new ThemeDTO(theme) : null, timeZone, authenticationMethod.getAuthenticationMethodId(), - fckLanguageMapping, (firstLogin == null || firstLogin ? true : false), // assume no firstLogin value means they haven't logged in + fckLanguageMapping, (firstLogin == null || firstLogin ? true : false), + // assume no firstLogin value means they haven't logged in lastVisitedOrganisationId, portraitUuid == null ? null : portraitUuid.toString()); } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserDetails.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserDetails.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserDetails.java (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -0,0 +1,26 @@ +package org.lamsfoundation.lams.usermanagement.service; + +import org.lamsfoundation.lams.usermanagement.User; + +import java.util.Comparator; + +/** + * Interface for all classes that mimic User class. + */ +public interface IUserDetails extends Comparable { + Comparator COMPARATOR = Comparator.comparing(IUserDetails::getLastName, + Comparator.nullsLast(String::compareTo)) + .thenComparing(IUserDetails::getFirstName, Comparator.nullsLast(String::compareTo)) + .thenComparing(IUserDetails::getLogin, Comparator.nullsLast(String::compareTo)); + + @Override + default int compareTo(IUserDetails o) { + return COMPARATOR.compare(this, o); + } + + String getFirstName(); + + String getLastName(); + + String getLogin(); +} \ No newline at end of file Fisheye: Tag 0793871529b98e50bcdba56d1f2aeeb0db812836 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/usermanagement/util/FirstNameAlphabeticComparator.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 0793871529b98e50bcdba56d1f2aeeb0db812836 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/usermanagement/util/LastNameAlphabeticComparator.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r207e39d5d5a89a3168505db28097ff3600226c3e -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 207e39d5d5a89a3168505db28097ff3600226c3e) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -65,8 +65,8 @@ import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserDetails; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.*; import org.lamsfoundation.lams.util.excel.ExcelCell; import org.lamsfoundation.lams.util.excel.ExcelRow; @@ -442,7 +442,7 @@ //size will be 0 in case of excel export if (size == 0) { learners = new LinkedList<>(lesson.getAllLearners()); - Collections.sort(learners, new LastNameAlphabeticComparator()); + Collections.sort(learners); userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, null); userToGradebookUserLessonMap = getUserToGradebookUserLessonMap(lesson, null); @@ -1318,7 +1318,7 @@ Map> activityToUserDTOMap = new LinkedHashMap<>(); - Set learners = new TreeSet(new LastNameAlphabeticComparator()); + Set learners = new TreeSet(); if (lesson.getAllLearners() != null) { learners.addAll(lesson.getAllLearners()); } @@ -1348,7 +1348,7 @@ if (activity instanceof SequenceActivity) { // use only a subset of learners for this branch of the branching activity based on who has started the branch - complexLearners = new TreeSet(new LastNameAlphabeticComparator()); + complexLearners = new TreeSet(); for (User learner : learners) { LearnerProgress learnerProgress = userToLearnerProgressMap.get(learner.getUserId()); if (learnerProgress != null && (learnerProgress.getCompletedActivities().get(activity) != null @@ -1611,7 +1611,7 @@ ExcelSheet learnerViewSheet = new ExcelSheet(getMessage("gradebook.export.learner.view")); sheets.add(learnerViewSheet); - Set learners = new TreeSet(new LastNameAlphabeticComparator()); + Set learners = new TreeSet(); if (lesson.getAllLearners() != null) { learners.addAll(lesson.getAllLearners()); } @@ -1890,7 +1890,7 @@ } //sort users by last name - TreeSet sortedLearners = new TreeSet(new LastNameAlphabeticComparator()); + TreeSet sortedLearners = new TreeSet(); sortedLearners.addAll(allLearners); for (User learner : sortedLearners) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java =================================================================== diff -u -rf3e44aee5373a1233080ea5acd1cb5959bb46544 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java (.../KumaliveService.java) (revision f3e44aee5373a1233080ea5acd1cb5959bb46544) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/kumalive/service/KumaliveService.java (.../KumaliveService.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -53,7 +53,6 @@ import org.lamsfoundation.lams.security.ISecurityService; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.CommonConstants; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; @@ -69,7 +68,6 @@ private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##", new DecimalFormatSymbols(Locale.ENGLISH)); - private static final Comparator USER_COMPARATOR = new LastNameAlphabeticComparator(); private IKumaliveDAO kumaliveDAO; private ISecurityService securityService; @@ -183,9 +181,8 @@ // paging int totalPages = 1; if (rowLimit < kumalives.size()) { - totalPages = new Double( - Math.ceil(new Integer(kumalives.size()).doubleValue() / new Integer(rowLimit).doubleValue())) - .intValue(); + totalPages = new Double(Math.ceil( + new Integer(kumalives.size()).doubleValue() / new Integer(rowLimit).doubleValue())).intValue(); int firstRow = (page - 1) * rowLimit; int lastRow = firstRow + rowLimit; @@ -296,8 +293,8 @@ } // mapping batch (question ID) -> rubric ID -> score - Map> scores = kumaliveDAO.findKumaliveScore(kumaliveId, userId).stream() - .collect(Collectors.groupingBy(KumaliveScore::getBatch, LinkedHashMap::new, + Map> scores = kumaliveDAO.findKumaliveScore(kumaliveId, userId).stream().collect( + Collectors.groupingBy(KumaliveScore::getBatch, LinkedHashMap::new, Collectors.toMap(score -> score.getRubric().getRubricId(), KumaliveScore::getScore))); ObjectNode resultJSON = JsonNodeFactory.instance.objectNode(); @@ -349,7 +346,7 @@ * Exports to Excel given Kumalives. */ private List export(List kumalives) { - Map>> learnerSummaries = new TreeMap<>(USER_COMPARATOR); + Map>> learnerSummaries = new TreeMap<>(); List sheets = new ArrayList<>(); ExcelSheet kumalivesSheet = buildReportKumalivesSheet(kumalives, learnerSummaries); @@ -378,11 +375,10 @@ kumaliveNameRow.addCell(kumalive.getName(), false); // mapping user (sorted by name) -> batch (i.e. question ID) -> rubric -> score - TreeMap>> scores = kumaliveDAO - .findKumaliveScore(kumalive.getKumaliveId(), true).stream() - .collect(Collectors.groupingBy(KumaliveScore::getUser, () -> new TreeMap<>(USER_COMPARATOR), - Collectors.groupingBy(KumaliveScore::getBatch, TreeMap::new, Collectors - .toMap(score -> score.getRubric().getRubricId(), KumaliveScore::getScore)))); + TreeMap>> scores = kumaliveDAO.findKumaliveScore(kumalive.getKumaliveId(), + true).stream().collect(Collectors.groupingBy(KumaliveScore::getUser, () -> new TreeMap<>(), + Collectors.groupingBy(KumaliveScore::getBatch, TreeMap::new, + Collectors.toMap(score -> score.getRubric().getRubricId(), KumaliveScore::getScore)))); if (scores.size() == 0) { // no learners answered to question, carry on @@ -516,8 +512,8 @@ Map learnerKumaliveSummary = learnerSummary.getValue().get(kumalive.getName()); boolean border = true; for (KumaliveRubric rubric : kumalive.getRubrics()) { - Double average = learnerKumaliveSummary == null ? null - : learnerKumaliveSummary.get(rubric.getRubricId()); + Double average = + learnerKumaliveSummary == null ? null : learnerKumaliveSummary.get(rubric.getRubricId()); border = false; if (average != null) { userRow.addCell(average, false, border ? 1 : 0); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r5ac2673214d4a3e9d831e1c468e235015b8bd0b2 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 5ac2673214d4a3e9d831e1c468e235015b8bd0b2) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -107,7 +107,6 @@ import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; @@ -2241,7 +2240,7 @@ "getClassMembersNotGrouped: Lesson " + lessonID + " has " + learners.size() + " learners."); } - SortedSet sortedUsers = new TreeSet(new LastNameAlphabeticComparator()); + SortedSet sortedUsers = new TreeSet(); sortedUsers.addAll(learners); return sortedUsers; } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingController.java =================================================================== diff -u -re0dbd6beaeea905447bd9a87cd23272c4cfee853 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingController.java (.../GroupingController.java) (revision e0dbd6beaeea905447bd9a87cd23272c4cfee853) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingController.java (.../GroupingController.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -42,7 +42,6 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.usermanagement.util.FirstNameAlphabeticComparator; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.WebUtil; @@ -137,10 +136,8 @@ SortedSet groups = new TreeSet<>(); groups.addAll(grouping.getGroups()); - // sort users with first, then last name, then login - Comparator userComparator = new FirstNameAlphabeticComparator(); for (Group group : groups) { - Set sortedUsers = new TreeSet<>(userComparator); + Set sortedUsers = new TreeSet<>(); sortedUsers.addAll(group.getUsers()); group.setUsers(sortedUsers); } @@ -174,10 +171,8 @@ if (orgGrouping != null) { groups.addAll(orgGrouping.getGroups()); - // sort users with first, then last name, then login - Comparator userComparator = new FirstNameAlphabeticComparator(); for (OrganisationGroup group : groups) { - Set sortedUsers = new TreeSet<>(userComparator); + Set sortedUsers = new TreeSet<>(); sortedUsers.addAll(group.getUsers()); group.setUsers(sortedUsers); } Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java =================================================================== diff -u -r52a6369ce66a2ea70d38bfa2e627dfcde6354b10 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java (.../SubmitUserDTO.java) (revision 52a6369ce66a2ea70d38bfa2e627dfcde6354b10) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/dto/SubmitUserDTO.java (.../SubmitUserDTO.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -21,21 +21,20 @@ * **************************************************************** */ - - package org.lamsfoundation.lams.tool.sbmt.dto; import java.io.Serializable; import java.util.Date; import java.util.List; import org.lamsfoundation.lams.tool.sbmt.model.SubmitUser; +import org.lamsfoundation.lams.usermanagement.service.IUserDetails; /** * @author Manpreet Minhas * @serial 5900249986365640342L */ -public class SubmitUserDTO implements Serializable { +public class SubmitUserDTO implements Serializable, IUserDetails { private static final long serialVersionUID = 5900249986365640342L; private Long toolSessionID; @@ -58,10 +57,6 @@ //submit file list private List filesUploaded; - public SubmitUserDTO() { - - } - public SubmitUserDTO(SubmitUser user) { this.userUid = user.getUid(); this.userID = user.getUserID(); @@ -80,7 +75,7 @@ /** * @param comments - * The comments to set. + * The comments to set. */ public void setComments(String comments) { this.comments = comments; @@ -95,7 +90,7 @@ /** * @param dateOfSubmission - * The dateOfSubmission to set. + * The dateOfSubmission to set. */ public void setDateOfSubmission(Date dateOfSubmission) { this.dateOfSubmission = dateOfSubmission; @@ -110,7 +105,7 @@ /** * @param fileDescription - * The fileDescription to set. + * The fileDescription to set. */ public void setFileDescription(String fileDescription) { this.fileDescription = fileDescription; @@ -125,7 +120,7 @@ /** * @param name - * The name to set. + * The name to set. */ public void setFileName(String name) { this.fileName = name; @@ -140,7 +135,7 @@ /** * @param marks - * The marks to set. + * The marks to set. */ public void setMarks(Float marks) { this.marks = marks; @@ -155,7 +150,7 @@ /** * @param toolSessionID - * The toolSessionID to set. + * The toolSessionID to set. */ public void setToolSessionID(Long toolSessionID) { this.toolSessionID = toolSessionID; @@ -170,7 +165,7 @@ /** * @param filesUploaded - * The filesUploaded to set. + * The filesUploaded to set. */ public void setFilesUploaded(List filesUploaded) { this.filesUploaded = filesUploaded; @@ -227,4 +222,4 @@ public String getFullName() { return new StringBuilder(getLastName()).append(" ").append(getFirstName()).toString(); } -} +} \ No newline at end of file Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7 -r0793871529b98e50bcdba56d1f2aeeb0db812836 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 0356b71a54403d2a4f45a3b90e5fab4fc3c11dd7) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 0793871529b98e50bcdba56d1f2aeeb0db812836) @@ -67,8 +67,8 @@ import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserDetails; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.usermanagement.util.LastNameAlphabeticComparator; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; import org.springframework.dao.DataAccessException; @@ -642,8 +642,7 @@ Locale currentLocale) { List list = submissionDetailsDAO.getSubmissionDetailsBySession(sessionID); if (list != null) { - SortedMap> map = new TreeMap>( - new LastNameAlphabeticComparator()); + SortedMap> map = new TreeMap<>(); Iterator iterator = list.iterator(); List userFileList; NumberFormat numberFormat = currentLocale != null ? NumberFormat.getInstance(currentLocale) : null; @@ -1100,7 +1099,8 @@ @Override public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString) { - return submitUserDAO.getUsersForTablesorter(sessionId, page, size, sorting, searchString, userManagementService); + return submitUserDAO.getUsersForTablesorter(sessionId, page, size, sorting, searchString, + userManagementService); } @Override