Index: lams_central/src/java/org/lamsfoundation/lams/util/IndexUtils.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/util/IndexUtils.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_central/src/java/org/lamsfoundation/lams/util/IndexUtils.java 4 Jan 2008 04:41:07 -0000 1.1 @@ -0,0 +1,66 @@ +/**************************************************************** + * 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: IndexUtils.java,v 1.1 2008/01/04 04:41:07 jliew Exp $ */ +package org.lamsfoundation.lams.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.lamsfoundation.lams.web.IndexLessonBean; + +/** + * @author jliew + * + */ +public class IndexUtils { + + // sort mapped lesson beans according to orderedLessonIds + public static List sortLessonBeans(String orderedLessonIds, Map map) { + ArrayList orderedList = new ArrayList(); + if (orderedLessonIds != null) { + List idList = Arrays.asList(orderedLessonIds.split(",")); + + for (String idString : idList) { + try { + Long id = new Long(Long.parseLong(idString)); + if (map.containsKey(id)) { + orderedList.add(map.get(id)); + map.remove(id); + } + } catch (NumberFormatException e) { + continue; + } + } + } + + // append lesson beans not mentioned in orderedLessonIds + if (!map.values().isEmpty()) { + orderedList.addAll(map.values()); + } + + return orderedList; + } +} + \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java,v diff -u -r1.6 -r1.7 --- lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java 14 Nov 2007 03:24:47 -0000 1.6 +++ lams_central/src/java/org/lamsfoundation/lams/web/DisplayGroupAction.java 4 Jan 2008 04:41:08 -0000 1.7 @@ -28,7 +28,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -56,6 +55,7 @@ import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.IndexUtils; import org.lamsfoundation.lams.util.WebUtil; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -167,7 +167,8 @@ // set lesson beans List lessonBeans = null; try { - lessonBeans = getLessonBeans(user.getUserId(), org.getOrganisationId(), roles, org.getOrderedLessonIds()); + Map map = populateLessonBeans(user.getUserId(), org.getOrganisationId(), roles); + lessonBeans = IndexUtils.sortLessonBeans(org.getOrderedLessonIds(), map); } catch (Exception e) { log.error("Failed retrieving user's lessons from database: " + e, e); } @@ -203,37 +204,6 @@ return orgBean; } - // get lesson beans and sort them - private List getLessonBeans(Integer userId, Integer orgId, List roles, String orderedLessonIds) - throws SQLException, NamingException { - Map map = populateLessonBeans(userId, orgId, roles); - ArrayList orderedList = new ArrayList(); - - if (orderedLessonIds != null) { - List idList = Arrays.asList(orderedLessonIds.split(",")); - - // sort mapped lesson beans according to orderedLessonIds - for (String idString : idList) { - try { - Long id = new Long(Long.parseLong(idString)); - if (map.containsKey(id)) { - orderedList.add(map.get(id)); - map.remove(id); - } - } catch (NumberFormatException e) { - continue; - } - } - } - - // append lesson beans not mentioned in orderedLessonIds - if (!map.values().isEmpty()) { - orderedList.addAll(map.values()); - } - - return orderedList; - } - // create lesson beans private Map populateLessonBeans(Integer userId, Integer orgId, List roles) throws SQLException, NamingException { Index: lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/Attic/IndexOrgBean.java,v diff -u -r1.6 -r1.7 --- lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java 25 Oct 2007 07:19:49 -0000 1.6 +++ lams_central/src/java/org/lamsfoundation/lams/web/IndexOrgBean.java 4 Jan 2008 04:41:08 -0000 1.7 @@ -26,6 +26,8 @@ import java.util.Date; import java.util.List; +import org.apache.commons.lang.builder.EqualsBuilder; + /** * @version * @@ -146,6 +148,14 @@ return name.compareTo(b.getName()); } + public boolean equals(Object other) { + if ( !(other instanceof IndexOrgBean) ) return false; + IndexOrgBean castOther = (IndexOrgBean) other; + return new EqualsBuilder() + .append(this.getId(), castOther.getId()) + .isEquals(); + } + public void addLesson(IndexLessonBean lesson) { lessons.add(lesson); } Index: lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java,v diff -u -r1.12 -r1.13 --- lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java 25 Oct 2007 07:19:49 -0000 1.12 +++ lams_central/src/java/org/lamsfoundation/lams/web/ProfileAction.java 4 Jan 2008 04:41:08 -0000 1.13 @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.usermanagement.SupportedLocale; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.IndexUtils; import org.lamsfoundation.lams.web.action.LamsDispatchAction; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; @@ -114,6 +115,7 @@ lesson.getLessonName(), "javascript:openLearner("+lesson.getLessonID()+")" ); + lessonBean.setId(lesson.getLessonID()); log.debug("Lesson: "+lesson.getLessonName()); // insert or update bean if it is a course @@ -135,19 +137,42 @@ IndexOrgBean orgBean = new IndexOrgBean(org.getOrganisationId(), org.getName(), orgTypeId); List childOrgBeans = parentOrgBean.getChildIndexOrgBeans(); if (childOrgBeans.contains(orgBean)) { + // use existing org bean orgBean = getOrgBean(org.getName(), childOrgBeans); + childOrgBeans.remove(orgBean); + orgBean.addLesson(lessonBean); + childOrgBeans.add(orgBean); + parentOrgBean.setChildIndexOrgBeans(childOrgBeans); + } else { + // using new org bean + orgBean.addLesson(lessonBean); + parentOrgBean.addChildOrgBean(orgBean); } - // add lesson to class bean - orgBean.addLesson(lessonBean); - // set the parent bean - parentOrgBean.addChildOrgBean(orgBean); orgBeansMap.put(parentOrgId, parentOrgBean); } } - ArrayList beans = new ArrayList(orgBeansMap.values()); + // sort group and subgroup names + ArrayList beans = new ArrayList(orgBeansMap.values()); Collections.sort(beans); + for (IndexOrgBean b : beans) { + Collections.sort(b.getChildIndexOrgBeans()); + } + // sort lessons inside each org bean + for (Object o : beans) { + IndexOrgBean bean = (IndexOrgBean)o; + Organisation org = (Organisation)service.findById(Organisation.class, bean.getId()); + + // put lesson beans into id-indexed map + HashMap map = new HashMap(); + for (IndexLessonBean lbean : bean.getLessons()) { + map.put(lbean.getId(), lbean); + } + + bean.setLessons(IndexUtils.sortLessonBeans(org.getOrderedLessonIds(), map)); + } + request.setAttribute("beans", beans); request.setAttribute("tab", "profile");