Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r8ff342a424c47f78303c3224966eb319dd28f1e4 -rfe1357c8a7b5215967bb22c5f19fbb9788148bf9 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 8ff342a424c47f78303c3224966eb319dd28f1e4) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision fe1357c8a7b5215967bb22c5f19fbb9788148bf9) @@ -1398,6 +1398,7 @@ private void runGateScheduler(ScheduleGateActivity scheduleGate, Date lessonStartTime) { + if(log.isDebugEnabled()) log.debug("Running scheduler for gate "+scheduleGate.getActivityId()+"..."); JobDetail openScheduleGateJob = getOpenScheduleGateJob(); @@ -1407,18 +1408,29 @@ openScheduleGateJob.getJobDataMap().put("gateId",scheduleGate.getActivityId()); closeScheduleGateJob.setName("closeGate"); closeScheduleGateJob.getJobDataMap().put("gateId",scheduleGate.getActivityId()); + + //create customized triggers Trigger openGateTrigger = new SimpleTrigger("openGateTrigger", Scheduler.DEFAULT_GROUP, scheduleGate.getLessonGateOpenTime(lessonStartTime)); + + Trigger closeGateTrigger = new SimpleTrigger("closeGateTrigger", Scheduler.DEFAULT_GROUP, scheduleGate.getLessonGateCloseTime(lessonStartTime)); + //start the scheduling job try { - scheduler.scheduleJob(openScheduleGateJob, openGateTrigger); - scheduler.scheduleJob(closeScheduleGateJob, closeGateTrigger); + if((scheduleGate.getGateStartTimeOffset() == null && scheduleGate.getGateEndTimeOffset() == null) || + (scheduleGate.getGateStartTimeOffset() != null && scheduleGate.getGateEndTimeOffset() == null)) + scheduler.scheduleJob(openScheduleGateJob, openGateTrigger); + else if(openGateTrigger.getStartTime().before(closeGateTrigger.getStartTime())) { + scheduler.scheduleJob(openScheduleGateJob, openGateTrigger); + scheduler.scheduleJob(closeScheduleGateJob, closeGateTrigger); + } + } catch (SchedulerException e) {