Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r606581007abbdaee5483777096f32ffac1c3e3eb -r1973448340d094a80e2e45079dcda82555649155 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/util/FirstNameAlphabeticComparator.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/util/FirstNameAlphabeticComparator.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/util/FirstNameAlphabeticComparator.java (revision 1973448340d094a80e2e45079dcda82555649155) @@ -0,0 +1,104 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ************************************************************************ + */ +/* $$Id$$ */ +package org.lamsfoundation.lams.usermanagement.util; + +import java.io.Serializable; +import java.util.Comparator; + +import org.lamsfoundation.lams.usermanagement.User; + +/** + * Compare two User objects using alphabetical comparison by First Name, Last Name and Login in that order. + * + * @author Marcin Cieslak + * + */ +public class FirstNameAlphabeticComparator implements Comparator, Serializable { + + /** + * @see java.util.Comparator#compare(Object, Object) + */ + @Override + public int compare(User o1, User o2) { + if ((o1 == null) || (o2 == null)) { + return compareNull(o1, o2); + } else { + int retValue = compareFirstName(o1, o2); + if (retValue == 0) { + retValue = compareLastName(o1, o2); + } + if (retValue == 0) { + retValue = compareLogin(o1, o2); + } + return retValue; + } + } + + private int compareLastName(User o1, User o2) { + String surname1 = o1.getLastName(); + String surname2 = o2.getLastName(); + + int retValue = -1; + if ((surname1 == null) || (surname2 == null)) { + retValue = compareNull(surname1, surname2); + } else { + retValue = surname1.compareTo(surname2); + } + return retValue; + } + + private int compareFirstName(User o1, User o2) { + String name1 = o1.getFirstName(); + String name2 = o2.getFirstName(); + + int retValue = -1; + if ((name1 == null) || (name2 == null)) { + retValue = compareNull(name1, name2); + } else { + retValue = name1.compareTo(name2); + } + return retValue; + } + + private int compareLogin(User o1, User o2) { + String name1 = o1.getLogin(); + String name2 = o2.getLogin(); + + int retValue = -1; + if ((name1 == null) || (name2 == null)) { + retValue = compareNull(name1, name2); + } else { + retValue = name1.compareTo(name2); + } + return retValue; + } + + private int compareNull(Object o1, Object o2) { + if (o1 == null) { + return (o2 != null ? -1 : 0); + } else { + return 1; + } + } +} Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java =================================================================== diff -u -r8aded0b18a5a7712622ae56f38923fa297449977 -r1973448340d094a80e2e45079dcda82555649155 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 8aded0b18a5a7712622ae56f38923fa297449977) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 1973448340d094a80e2e45079dcda82555649155) @@ -25,6 +25,8 @@ package org.lamsfoundation.lams.learning.web.action; import java.io.IOException; +import java.util.Comparator; +import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -49,6 +51,8 @@ import org.lamsfoundation.lams.learningdesign.LearnerChoiceGrouping; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.util.FirstNameAlphabeticComparator; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -241,6 +245,7 @@ * * @param request */ + @SuppressWarnings("unchecked") private void prepareGroupData(HttpServletRequest request) { ICoreLearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); @@ -252,6 +257,15 @@ if (grouping != null) { 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); + sortedUsers.addAll(group.getUsers()); + group.setUsers(sortedUsers); + } + request.setAttribute(GroupingAction.GROUPS, groups); request.setAttribute(GroupingAction.TITLE, activity.getTitle()); request.setAttribute(AttributeNames.PARAM_ACTIVITY_ID, activity.getActivityId());