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:
+ *
+ * - List of learners in this group
+ * - Order ID
+ * - Group name
+ *
*
* @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