Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/MonitoringConstants.java (.../MonitoringConstants.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -31,4 +31,5 @@ public static final String KEY_LEARNER = "learners"; public static final String JOB_START_LESSON = "startScheduleLessonJob"; public static final String JOB_FINISH_LESSON = "finishScheduleLessonJob"; + public static final String PARAM_LESSON_START_DATE = "lessonStartDate"; } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/FinishScheduleLesson.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/FinishScheduleLesson.java (.../FinishScheduleLesson.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/FinishScheduleLesson.java (.../FinishScheduleLesson.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -20,7 +20,10 @@ */ package org.lamsfoundation.lams.monitoring.service; +import java.util.Map; + import org.apache.log4j.Logger; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; @@ -29,7 +32,7 @@ //--------------------------------------------------------------------- // Instance variables //--------------------------------------------------------------------- - private static Logger log = Logger.getLogger(OpenScheduleGateJob.class); + private static Logger log = Logger.getLogger(FinishScheduleLesson.class); private IMonitoringService monitoringService; //--------------------------------------------------------------------- @@ -43,6 +46,18 @@ this.monitoringService = monitoringService; } - protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { + protected void executeInternal(JobExecutionContext context) throws JobExecutionException { + //getting gate id set from scheduler + Map properties = context.getJobDetail().getJobDataMap(); + long lessonId = ((Long)properties.get(MonitoringConstants.KEY_LESSON_ID)).longValue(); + + if(log.isDebugEnabled()) + log.debug("Lesson ["+lessonId+"] is stopping..."); + + + monitoringService.archiveLesson(lessonId); + + if(log.isDebugEnabled()) + log.debug("Lesson ["+lessonId+"] stopped"); } } Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -99,13 +99,20 @@ */ public void startLesson(long lessonId); /** - * + * Start a lesson on schedule datetime. * @param lessonId * @param startDate the lesson start date and time. * @see org.lamsfoundation.lams.monitoring.service#startLesson(long) */ public void startLessonOnSchedule(long lessonId, Date startDate); /** + * Finish a lesson on schedule datetime. + * @param lessonId + * @param endDate teh lesson end date and time. + */ + public void finishLessonOnSchedule(long lessonId, Date endDate); + + /** * Force the learner to complete all the activities for current lesson. * @param learnerProgressId the learner progress belongs to the user who * will be force complete Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -389,9 +389,10 @@ return newLesson; } /** - * Start lesson + * Start lesson on schedule. * @param lessonId - * @param startDate + * @param startDate + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#startLessonOnSchedule(long , Date) */ public void startLessonOnSchedule(long lessonId, Date startDate){ JobDetail startLessonJob = getStartScheduleLessonJob(); @@ -416,6 +417,36 @@ if(log.isDebugEnabled()) log.debug("Start lesson ["+lessonId+"] on schedule is configured"); } + + /** + * Start lesson on schedule. + * @param lessonId + * @param endDate + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#finishLessonOnSchedule(long , Date) + */ + public void finishLessonOnSchedule(long lessonId, Date endDate) { + JobDetail finishLessonJob = getFinishScheduleLessonJob(); + //setup the message for scheduling job + finishLessonJob.setName("finishLessonOnSchedule"); + finishLessonJob.getJobDataMap().put(MonitoringConstants.KEY_LESSON_ID,new Long(lessonId)); + //create customized triggers + Trigger finishLessonTrigger = new SimpleTrigger("finishLessonOnScheduleTrigger", + Scheduler.DEFAULT_GROUP, + endDate); + //start the scheduling job + try + { + scheduler.scheduleJob(finishLessonJob, finishLessonTrigger); + } + catch (SchedulerException e) + { + throw new MonitoringServiceException("Error occurred at " + + "[finishLessonOnSchedule]- fail to start scheduling",e); + } + + if(log.isDebugEnabled()) + log.debug("Finish lesson ["+lessonId+"] on schedule is configured"); + } /** * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#startlesson(long) Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/StartScheduleLesson.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/StartScheduleLesson.java (.../StartScheduleLesson.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/StartScheduleLesson.java (.../StartScheduleLesson.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -33,7 +33,7 @@ //--------------------------------------------------------------------- // Instance variables //--------------------------------------------------------------------- - private static Logger log = Logger.getLogger(OpenScheduleGateJob.class); + private static Logger log = Logger.getLogger(StartScheduleLesson.class); private IMonitoringService monitoringService; //--------------------------------------------------------------------- Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java =================================================================== diff -u -ra22606299d58eedf62e8df38b26c4fa5662df79e -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java (.../DummyMonitoringAction.java) (revision a22606299d58eedf62e8df38b26c4fa5662df79e) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/DummyMonitoringAction.java (.../DummyMonitoringAction.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -208,11 +208,11 @@ // start the lesson. this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); - Calendar cal = Calendar.getInstance(); - cal.setTime(new Date()); - cal.add(Calendar.MILLISECOND,5000); - monitoringService.startLessonOnSchedule(testLesson.getLessonId().longValue(),cal.getTime()); -// monitoringService.startLesson(testLesson.getLessonId().longValue()); +// Calendar cal = Calendar.getInstance(); +// cal.setTime(new Date()); +// cal.add(Calendar.MILLISECOND,5000); +// monitoringService.startLessonOnSchedule(testLesson.getLessonId().longValue(),cal.getTime()); + monitoringService.startLesson(testLesson.getLessonId().longValue()); return mapping.findForward(LESSON_STARTED_FORWARD); } @@ -242,6 +242,11 @@ this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); long lessonId = WebUtil.readLongParam(request,AttributeNames.PARAM_LESSON_ID); +// Calendar cal = Calendar.getInstance(); +// cal.setTime(new Date()); +// cal.add(Calendar.MILLISECOND, 5000); +// monitoringService.finishLessonOnSchedule(lessonId,cal.getTime()); + monitoringService.archiveLesson(lessonId); return unspecified(mapping, form, request, response); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -rc1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b -r2428d60d75ce02f5e171cafa31853de121ddfe31 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision c1dfdde7a9d5ed9b49fc9772bbb9f018b085d00b) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 2428d60d75ce02f5e171cafa31853de121ddfe31) @@ -24,6 +24,9 @@ import java.io.IOException; import java.io.PrintWriter; +import java.text.DateFormat; +import java.text.ParseException; +import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -35,6 +38,7 @@ import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.monitoring.MonitoringConstants; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; @@ -218,8 +222,103 @@ //return mapping.findForward(SCHEDULER); } + /** + * The Struts dispatch method that starts a lesson on schedule that has been created + * beforehand. + * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * @throws IOException + * @throws ServletException + * @throws + */ + public ActionForward startOnScheduleLesson(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + String dateStr = WebUtil.readStrParam(request, MonitoringConstants.PARAM_LESSON_START_DATE); + FlashMessage flashMessage = null; + + try { + Date startDate = DateFormat.getInstance().parse(dateStr); + monitoringService.startLessonOnSchedule(lessonId,startDate); + flashMessage = new FlashMessage("startOnScheduleLesson",Boolean.TRUE); + } catch(ParseException e){ + flashMessage = new FlashMessage("startOnScheduleLesson", + "Invalid lesson start datetime format:" + dateStr, + FlashMessage.ERROR); + }catch (Exception e) { + flashMessage = new FlashMessage("startOnScheduleLesson", + "Invalid lessonID :" + lessonId, + FlashMessage.ERROR); + } + + String message = flashMessage.serializeMessage(); + + return outputPacket(mapping,request,response,message,"details"); + + //return mapping.findForward(SCHEDULER); + } /** + * The Struts dispatch method that finsh a lesson on schedule that has been started + * beforehand. + * + * @param mapping An ActionMapping class that will be used by the Action class to tell + * the ActionServlet where to send the end-user. + * + * @param form The ActionForm class that will contain any data submitted + * by the end-user via a form. + * @param request A standard Servlet HttpServletRequest class. + * @param response A standard Servlet HttpServletResponse class. + * @return An ActionForward class that will be returned to the ActionServlet indicating where + * the user is to go next. + * @throws IOException + * @throws ServletException + * @throws + */ + public ActionForward finishOnScheduleLesson(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + this.monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); + long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + String dateStr = WebUtil.readStrParam(request, MonitoringConstants.PARAM_LESSON_START_DATE); + FlashMessage flashMessage = null; + + try { + Date startDate = DateFormat.getInstance().parse(dateStr); + monitoringService.finishLessonOnSchedule(lessonId,startDate); + flashMessage = new FlashMessage("finishOnScheduleLesson",Boolean.TRUE); + } catch(ParseException e){ + flashMessage = new FlashMessage("finishOnScheduleLesson", + "Invalid lesson start datetime format:" + dateStr, + FlashMessage.ERROR); + }catch (Exception e) { + flashMessage = new FlashMessage("finishOnScheduleLesson", + "Invalid lessonID :" + lessonId, + FlashMessage.ERROR); + } + + String message = flashMessage.serializeMessage(); + + return outputPacket(mapping,request,response,message,"details"); + } + + /** * The Struts dispatch method to archive a lesson. A wddx * acknowledgement message will be serialized and sent back to the flash * component.