Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/LearnerProgressBatchDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/Attic/LearnerProgressBatchDTO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/LearnerProgressBatchDTO.java 9 Nov 2007 08:16:23 -0000 1.1 @@ -0,0 +1,73 @@ +/**************************************************************** + * 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: LearnerProgressBatchDTO.java,v 1.1 2007/11/09 08:16:23 fmalikoff Exp $ */ +package org.lamsfoundation.lams.monitoring; + +import java.util.Vector; + +import org.lamsfoundation.lams.lesson.LearnerProgress; + +/** + * Return the details of the Learner Progress batching - how many learner progress entries exist for this lesson, + * how many in a batch, how many batches available and the first batch of users. + */ +public class LearnerProgressBatchDTO { + + private Vector learnerProgressList; + private Integer batchSize; + private Integer numBatches; + private Integer numAllLearnerProgress; + + public LearnerProgressBatchDTO(Vector progress, int batchSize, int numAllLearnerProgress) { + this.learnerProgressList = progress; + this.batchSize = batchSize; + this.numAllLearnerProgress = numAllLearnerProgress; + + // integer division truncates, so convert to floating point first. + double batchSizeAsDouble = (double) batchSize; + double numAllLearnerProgressAsDouble = (double) numAllLearnerProgress; + double numBatchesDouble = numAllLearnerProgressAsDouble / batchSizeAsDouble; + numBatchesDouble = Math.ceil(numBatchesDouble); + + numBatches = (int) numBatchesDouble; + if ( numBatches < 1 ) { + numBatches = 1; + } + } + + public Vector getLearnerProgressList() { + return learnerProgressList; + } + + public Integer getBatchSize() { + return batchSize; + } + + public Integer getNumBatches() { + return numBatches; + } + + public Integer getNumAllLearnerProgress() { + return numAllLearnerProgress; + } +} 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.25 -r1.26 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 9 May 2007 01:01:27 -0000 1.25 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml 9 Nov 2007 08:16:23 -0000 1.26 @@ -39,6 +39,7 @@ + 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.69 -r1.70 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 10 Oct 2007 07:12:01 -0000 1.69 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 9 Nov 2007 08:16:23 -0000 1.70 @@ -318,6 +318,32 @@ public String getAllLearnersProgress(Long lessonID, Integer userID)throws IOException; /** + * This method returns a batch of progress information of learners + * in a given Lesson. It returns the first batch of users, using the learner's name as the + * sorting order. The batch size is determined by the LEARNER_PROGRESS_BATCH size + * in the database. + * + * @param lessonID The lesson_id of the Lesson whose progress information is required + * @param userID The user id of the user requesting the progress details + * @return String The requested information in wddx format + * @throws IOException + */ + public String getInitialLearnersProgress(Long lessonID, Integer userID)throws IOException; + + /** + * This method returns the next batch of progress information of learners + * in a given Lesson. The batch size is determined by the LEARNER_PROGRESS_BATCH size + * in the database, and the next batch starts at after the supplied user_id + * + * @param lessonID The lesson_id of the Lesson whose progress information is required + * @param lastUserID The user id of the last user from the previous batch + * @param userID The user id of the user requesting the progress details + * @return String The requested information in wddx format + * @throws IOException + */ + public String getAdditionalLearnersProgress(Long lessonID, Integer lastUserID, Integer userID)throws IOException; + + /** * This method is called when the user clicks the 'Contribute' tab in the * monitoring enviornment. It returns a list of activities "in the * order" they have to be performed and with additional information as to 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.119 -r1.120 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 10 Oct 2007 07:12:01 -0000 1.119 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 9 Nov 2007 08:16:23 -0000 1.120 @@ -68,11 +68,13 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.LessonClass; +import org.lamsfoundation.lams.lesson.dao.ILearnerProgressDAO; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.lesson.service.LessonServiceException; +import org.lamsfoundation.lams.monitoring.LearnerProgressBatchDTO; import org.lamsfoundation.lams.monitoring.MonitoringConstants; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; @@ -128,14 +130,16 @@ private static final long numMilliSecondsInADay = 24 * 60 * 60 * 1000; private static final String AUDIT_LEARNER_PORTFOLIO_SET = "audit.learner.portfolio.set"; private static final String AUDIT_LESSON_CREATED_KEY = "audit.lesson.created"; - + private static final int DEFAULT_LEARNER_PROGRESS_BATCH_SIZE = 15; + private ILessonDAO lessonDAO; private ILessonClassDAO lessonClassDAO; private ITransitionDAO transitionDAO; private IActivityDAO activityDAO; private IBaseDAO baseDAO; private ILearningDesignDAO learningDesignDAO; private IGroupingDAO groupingDAO; + private ILearnerProgressDAO learnerProgressDAO; private IAuthoringService authoringService; private ICoreLearnerService learnerService; private ILessonService lessonService; @@ -225,7 +229,16 @@ { this.lessonDAO = lessonDAO; } + /** + * @param learnerProgressDAO The learnerProgressDAO to set. + */ + public void setLearnerProgressDAO(ILearnerProgressDAO learnerProgressDAO) + { + this.learnerProgressDAO = learnerProgressDAO; + } + + /** * @param userDAO */ public void setBaseDAO(IBaseDAO baseDAO) { @@ -1283,15 +1296,15 @@ } /** * (non-Javadoc) - * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getAllLearnersProgress(java.lang.Long) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getAllLearnersProgress(java.lang.Long, java.lang.Integer) */ public String getAllLearnersProgress(Long lessonID, Integer userID)throws IOException { Lesson lesson = lessonDAO.getLesson(lessonID); - checkOwnerOrStaffMember(userID, lesson, "get all learners progress"); - - Vector progressData = new Vector(); - FlashMessage flashMessage; - if(lesson!=null){ + FlashMessage flashMessage; + + if(lesson!=null){ + checkOwnerOrStaffMember(userID, lesson, "get all learners progress"); + Vector progressData = new Vector(); Iterator iterator = lesson.getLearnerProgresses().iterator(); while(iterator.hasNext()){ LearnerProgress learnerProgress = (LearnerProgress)iterator.next(); @@ -1305,8 +1318,71 @@ } return flashMessage.serializeMessage(); } - /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getInitialLearnersProgress(java.lang.Long, java.lang.Integer) + */ + public String getInitialLearnersProgress(Long lessonID, Integer userID)throws IOException { + Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; + + if(lesson!=null){ + checkOwnerOrStaffMember(userID, lesson, "get first batch of learners progress details"); + Vector progressData = new Vector(); + + int batchSize = Configuration.getAsInt(ConfigurationKeys.LEARNER_PROGRESS_BATCH_SIZE); + if ( batchSize < 1 ) + batchSize = DEFAULT_LEARNER_PROGRESS_BATCH_SIZE; + + Iterator iterator = learnerProgressDAO.getBatchLearnerProgress(lessonID, null, batchSize).iterator(); + while(iterator.hasNext()){ + LearnerProgress learnerProgress = (LearnerProgress)iterator.next(); + progressData.add(learnerProgress.getLearnerProgressData()); + } + + Integer numAllLearnerProgress = learnerProgressDAO.getNumAllLearnerProgress(lessonID); + LearnerProgressBatchDTO dto = new LearnerProgressBatchDTO(progressData, batchSize, numAllLearnerProgress); + + flashMessage = new FlashMessage("getInitialLearnersProgress",dto); + }else{ + flashMessage = new FlashMessage("getInitialLearnersProgress", + messageService.getMessage("NO.SUCH.LESSON",new Object[]{lessonID}), + FlashMessage.ERROR); + } + return flashMessage.serializeMessage(); + } + /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getAdditionalLearnersProgress(java.lang.Long, java.lang.Integer, java.lang.Integer) + */ + public String getAdditionalLearnersProgress(Long lessonID, Integer lastUserID, Integer userID)throws IOException { + Lesson lesson = lessonDAO.getLesson(lessonID); + FlashMessage flashMessage; + + if(lesson!=null){ + checkOwnerOrStaffMember(userID, lesson, "get next batch of learners progress details"); + Vector progressData = new Vector(); + + User lastUser = (User)baseDAO.find(User.class,lastUserID); + int batchSize = Configuration.getAsInt(ConfigurationKeys.LEARNER_PROGRESS_BATCH_SIZE); + if ( batchSize < 1 ) + batchSize = DEFAULT_LEARNER_PROGRESS_BATCH_SIZE; + + Iterator iterator = learnerProgressDAO.getBatchLearnerProgress(lessonID, lastUser, batchSize).iterator(); + while(iterator.hasNext()){ + LearnerProgress learnerProgress = (LearnerProgress)iterator.next(); + progressData.add(learnerProgress.getLearnerProgressData()); + } + flashMessage = new FlashMessage("getAdditionalLearnersProgress",progressData); + }else{ + flashMessage = new FlashMessage("getAdditionalLearnersProgress", + messageService.getMessage("NO.SUCH.LESSON",new Object[]{lessonID}), + FlashMessage.ERROR); + } + return flashMessage.serializeMessage(); + } + + /** * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getActivityById(Long) */ public Activity getActivityById(Long activityId) Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java,v diff -u -r1.53 -r1.54 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 15 Mar 2007 05:13:31 -0000 1.53 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 9 Nov 2007 08:16:23 -0000 1.54 @@ -636,14 +636,15 @@ writer.println(wddxPacket); return null; } + /** Get the learner progress data for all learners in a lesson. This is called by the sequence tab in monitoring */ public ActionForward getAllLearnersProgress(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws IOException{ String wddxPacket; IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); try{ - Long lessonID = new Long(WebUtil.readLongParam(request,"lessonID")); + Long lessonID = WebUtil.readLongParam(request,"lessonID",false); wddxPacket = monitoringService.getAllLearnersProgress(lessonID, getUserId()); }catch (Exception e) { wddxPacket = handleException(e, "getAllLearnersProgress", monitoringService).serializeMessage(); @@ -653,6 +654,43 @@ writer.println(wddxPacket); return null; } + /** Get the first batch of learner progress data learners in a lesson. This is called by the learner progress tab in monitoring */ + public ActionForward getInitialLearnersProgress(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response)throws IOException{ + String wddxPacket; + IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + try{ + Long lessonID = WebUtil.readLongParam(request,"lessonID",false); + wddxPacket = monitoringService.getInitialLearnersProgress(lessonID, getUserId()); + }catch (Exception e) { + wddxPacket = handleException(e, "getInitialLearnersProgress", monitoringService).serializeMessage(); + } + + PrintWriter writer = response.getWriter(); + writer.println(wddxPacket); + return null; + } + /** Get a followup batch of learner progress data learners in a lesson. This is called by the learner progress tab in monitoring */ + public ActionForward getAdditionalLearnersProgress(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response)throws IOException{ + String wddxPacket; + IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + try{ + Long lessonID = WebUtil.readLongParam(request,"lessonID",false); + Integer lastUserID = WebUtil.readIntParam(request,"lastUserID",false); + wddxPacket = monitoringService.getAdditionalLearnersProgress(lessonID, lastUserID, getUserId()); + }catch (Exception e) { + wddxPacket = handleException(e, "getAdditionalLearnersProgress", monitoringService).serializeMessage(); + } + + PrintWriter writer = response.getWriter(); + writer.println(wddxPacket); + return null; + } public ActionForward getAllContributeActivities(ActionMapping mapping, ActionForm form, HttpServletRequest request,