Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java,v diff -u -r1.6 -r1.7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 1 Feb 2006 03:32:21 -0000 1.6 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java 2 Feb 2006 05:53:51 -0000 1.7 @@ -20,7 +20,9 @@ */ package org.lamsfoundation.lams.monitoring; +import java.util.Hashtable; + public class MonitoringConstants { public static final String MONITORING_SERVICE_BEAN_NAME = "monitoringService"; @@ -35,4 +37,9 @@ public static final String PARAM_LESSON_START_DATE = "lessonStartDate"; public static final String PARAM_LESSON_FINISH_DATE = "lessonFinishDate"; public static final String PARAM_LEARNER_ID = "learnerID"; + public static final String KEY_GROUPING_ACTIVITY = "groupingActivityID"; + public static final String KEY_GROUPS = "groups"; + public static final String KEY_GROUP_NAME = "groupName"; + public static final String KEY_GROUP_ORDER_ID = "orderID"; + public static final String KEY_GROUP_LEARNERS = "learners"; } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml,v diff -u -r1.8 -r1.9 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 30 Jan 2006 05:31:20 -0000 1.8 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 2 Feb 2006 05:53:51 -0000 1.9 @@ -42,6 +42,7 @@ singleton="false" > + Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java,v diff -u -r1.33 -r1.34 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 1 Feb 2006 04:43:02 -0000 1.33 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 2 Feb 2006 05:53:51 -0000 1.34 @@ -374,9 +374,16 @@ public String releaseGate(Long activityID) throws IOException; /** + * Perform chosen grouping. The groups contains a list of Hashtable which contain + * following information for each group:
+ *
    + *
  1. List of learners in this group
  2. + *
  3. Order ID
  4. + *
  5. Group name
  6. + *
* * @param groupingActivity - * @param groups + * @param groups list of group information. */ public void performChosenGrouping(GroupingActivity groupingActivity, List groups); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v diff -u -r1.43 -r1.44 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 1 Feb 2006 04:43:02 -0000 1.43 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 2 Feb 2006 05:53:51 -0000 1.44 @@ -21,14 +21,17 @@ package org.lamsfoundation.lams.monitoring.service; import java.io.IOException; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.Vector; import org.apache.log4j.Logger; @@ -44,6 +47,7 @@ import org.lamsfoundation.lams.learningdesign.ScheduleGateActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; +import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO; import org.lamsfoundation.lams.learningdesign.dao.ITransitionDAO; import org.lamsfoundation.lams.learningdesign.dto.ProgressActivityDTO; @@ -71,6 +75,7 @@ import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.util.wddx.FlashMessage; import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.lamsfoundation.lams.util.wddx.WDDXProcessorConversionException; import org.lamsfoundation.lams.web.util.AttributeNames; import org.quartz.JobDetail; import org.quartz.Scheduler; @@ -111,6 +116,7 @@ private ILearningDesignDAO learningDesignDAO; private IOrganisationDAO organisationDAO; private IUserDAO userDAO; + private IGroupingDAO groupingDAO; private IAuthoringService authoringService; private ILearnerService learnerService; private ILamsCoreToolService lamsCoreToolService; @@ -178,12 +184,17 @@ this.lessonDAO = lessonDAO; } /** - * * @param userDAO */ public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; } + /** + * @param groupingDAO + */ + public void setGroupingDAO(IGroupingDAO groupingDAO) { + this.groupingDAO = groupingDAO; + } /** * @param lamsToolService The lamsToolService to set. @@ -1045,9 +1056,50 @@ return flashMessage.serializeMessage(); } + /** + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#performChosenGrouping(GroupingActivity,java.util.List) + */ + public void performChosenGrouping(GroupingActivity groupingActivity, List groups) { + Grouping grouping = groupingActivity.getCreateGrouping(); + + if(!grouping.isChosenGrouping()){ + log.error("GroupingActivity ["+groupingActivity.getActivityId() +"] does not have chosen grouping."); + throw new MonitoringServiceException("GroupingActivity ["+groupingActivity.getActivityId() + +"] does not have chosen grouping."); + } + try { + //try to sorted group list by orderID. + Iterator iter = groups.iterator(); + Map sortedMap = new TreeMap(new Comparator(){ + public int compare(Object arg0, Object arg1) { + return ((Long)arg0).compareTo((Long)arg1); + } + } + ); + while(iter.hasNext()){ + Hashtable group = (Hashtable) iter.next(); + Long orderId = WDDXProcessor.convertToLong(group,MonitoringConstants.KEY_GROUP_ORDER_ID); + sortedMap.put(orderId,group); + } + iter = sortedMap.values().iterator(); + //grouping all group in list + while(iter.hasNext()){ + Hashtable group = (Hashtable) iter.next(); + List learners = (List) group.get(MonitoringConstants.KEY_GROUP_LEARNERS); + String groupName = WDDXProcessor.convertToString(group,MonitoringConstants.KEY_GROUP_NAME); + log.debug("Performing grouping for " + groupName + "..."); + grouping.doGrouping(groupName,learners); + groupingDAO.update(grouping); + log.debug("Finish grouping for " + groupName); + } + } catch (WDDXProcessorConversionException e) { + throw new MonitoringServiceException("Perform chosen grouping occurs error when parsing WDDX package:" + + e.getMessage()); + } + + } - //--------------------------------------------------------------------- // Helper Methods - create lesson //--------------------------------------------------------------------- @@ -1072,8 +1124,9 @@ newLessonClass.setStaffGroup(Group.createStaffGroup(newLessonClass, new HashSet(staffs))); //setup learner group + //TODO:need confirm group name! newLessonClass.getGroups() - .add(Group.createLearnerGroup(newLessonClass, + .add(Group.createLearnerGroup(newLessonClass, "Learner Group", new HashSet(organizationUsers))); lessonClassDAO.updateLessonClass(newLessonClass); @@ -1349,7 +1402,5 @@ return learningDesignDAO.getLearningDesignByUserId(userId); } - public void performChosenGrouping(GroupingActivity groupingActivity, List groups) { - - } + } \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/PerformChosenGroupingServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/PerformChosenGroupingServlet.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/PerformChosenGroupingServlet.java 2 Feb 2006 05:53:51 -0000 1.1 @@ -0,0 +1,98 @@ +/* + *Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * + *This program is free software; you can redistribute it and/or modify + *it under the terms of the GNU General Public License as published by + *the Free Software Foundation; either version 2 of the License, or + *(at your option) any later version. + * + *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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + *USA + * + *http://www.gnu.org/licenses/gpl.txt + */ +package org.lamsfoundation.lams.monitoring.web; + +import java.io.IOException; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.learningdesign.GroupingActivity; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; +import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.wddx.FlashMessage; +import org.lamsfoundation.lams.util.wddx.WDDXProcessor; +import org.lamsfoundation.lams.web.servlet.AbstractStoreWDDXPacketServlet; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; + +/** + * + * @author Steve.Ni + * + * @version $Revision: 1.1 $ + * @web:servlet name="performChosenGrouping" + * @web:servlet-mapping url-pattern="/monitoring/performChosenGrouping" + */ +public class PerformChosenGroupingServlet extends AbstractStoreWDDXPacketServlet { + //--------------------------------------------------------------------- + // Instance variables + //--------------------------------------------------------------------- + private static Logger log = Logger.getLogger(PerformChosenGroupingServlet.class); + private static final long serialVersionUID = -3423985351915607659L; + + public IMonitoringService getMonitoringService(){ + WebApplicationContext webContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); + return (IMonitoringService) webContext.getBean(MonitoringConstants.MONITORING_SERVICE_BEAN_NAME); + } + + protected String process(String chosenGroupingPacket, HttpServletRequest request) throws Exception { + FlashMessage flashMessage = null; + try { + Hashtable table = (Hashtable)WDDXProcessor.deserialize(chosenGroupingPacket); + //get back value from WDDX package + long activityId = WDDXProcessor.convertToLong(MonitoringConstants.KEY_GROUPING_ACTIVITY, + table.get(MonitoringConstants.KEY_GROUPING_ACTIVITY)).longValue(); + List groups = (List) table.get(MonitoringConstants.KEY_GROUPS); + + IMonitoringService monitoringService = getMonitoringService(); + //get the activity according to the given activity ID + GroupingActivity activity = (GroupingActivity) monitoringService.getActivityById(activityId); + //perform grouping + monitoringService.performChosenGrouping(activity,groups); + } catch (Exception e) { + e.printStackTrace(); + } + + String message = "Failed on creating flash message:" + flashMessage; + try { + message = flashMessage.serializeMessage(); + } catch (IOException e) { + log.error(message); + } + + return message; + + } + + protected String getMessageKey(String packet, HttpServletRequest request) { + return MonitoringConstants.PERFORM_CHOSEN_GROUPING_KEY; + } + +} Index: lams_monitoring/web/WEB-INF/web.xml =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/web/WEB-INF/Attic/web.xml,v diff -u -r1.14 -r1.15 --- lams_monitoring/web/WEB-INF/web.xml 23 Jan 2006 06:02:21 -0000 1.14 +++ lams_monitoring/web/WEB-INF/web.xml 2 Feb 2006 05:53:51 -0000 1.15 @@ -127,6 +127,11 @@ + performChosenGrouping + org.lamsfoundation.lams.monitoring.web.PerformChosenGroupingServlet + + + createLesson org.lamsfoundation.lams.monitoring.web.CreateLessionServlet @@ -201,6 +206,10 @@ + performChosenGrouping + /monitoring/performChosenGrouping + + createLesson /monitoring/createLesson