Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u -r81e8b06bd5291466798d9bf17ac25a7d4184af72 -r01801565c08ef5dd2394a888e7fa5043d8a93584 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 81e8b06bd5291466798d9bf17ac25a7d4184af72) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -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 =================================================================== diff -u -ra28e6fbe16b6a29a83038a73012f7e7b9b5669e5 -r01801565c08ef5dd2394a888e7fa5043d8a93584 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision a28e6fbe16b6a29a83038a73012f7e7b9b5669e5) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -42,6 +42,7 @@ singleton="false" > + Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -rb5137f7e9fdfffbaec18f55e1c6e94bda6a201a1 -r01801565c08ef5dd2394a888e7fa5043d8a93584 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision b5137f7e9fdfffbaec18f55e1c6e94bda6a201a1) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -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 =================================================================== diff -u -rb5137f7e9fdfffbaec18f55e1c6e94bda6a201a1 -r01801565c08ef5dd2394a888e7fa5043d8a93584 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision b5137f7e9fdfffbaec18f55e1c6e94bda6a201a1) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -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 =================================================================== diff -u --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/PerformChosenGroupingServlet.java (revision 0) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/PerformChosenGroupingServlet.java (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -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$ + * @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 =================================================================== diff -u -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b -r01801565c08ef5dd2394a888e7fa5043d8a93584 --- lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) +++ lams_monitoring/web/WEB-INF/web.xml (.../web.xml) (revision 01801565c08ef5dd2394a888e7fa5043d8a93584) @@ -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