Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java
===================================================================
diff -u -r66f472a982a10227afd93740142320f4be590c8a -rbaeb14be8e4c423b2e9ebe3a253c73499051f765
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 66f472a982a10227afd93740142320f4be590c8a)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision baeb14be8e4c423b2e9ebe3a253c73499051f765)
@@ -812,30 +812,56 @@
.withDescription(scheduleGate.getTitle() + ":" + lessonName)
.usingJobData("gateId", scheduleGate.getActivityId()).build();
- // create customized triggers
- Trigger openGateTrigger = TriggerBuilder.newTrigger()
- .withIdentity("openGateTrigger:" + scheduleGate.getActivityId())
- .startAt(scheduleGate.getGateOpenTime(schedulingStartTime)).build();
+ // start the scheduling job
+ boolean startGateOnly = ((scheduleGate.getGateStartTimeOffset() == null)
+ && (scheduleGate.getGateEndTimeOffset() == null))
+ || ((scheduleGate.getGateStartTimeOffset() != null) && (scheduleGate.getGateEndTimeOffset() == null));
+ String openGateTriggerName = "openGateTrigger:" + scheduleGate.getActivityId();
+ String closeGateTriggerName = "closeGateTrigger:" + scheduleGate.getActivityId();
- Trigger closeGateTrigger = TriggerBuilder.newTrigger()
- .withIdentity("closeGateTrigger:" + scheduleGate.getActivityId())
- .startAt(scheduleGate.getGateCloseTime(schedulingStartTime)).build();
+ Trigger openGateTrigger = null;
+ Trigger closeGateTrigger = null;
+ try {
+ openGateTrigger = scheduler.getTrigger(TriggerKey.triggerKey(openGateTriggerName));
+ closeGateTrigger = scheduler.getTrigger(TriggerKey.triggerKey(closeGateTriggerName));
+ } catch (SchedulerException e) {
+ MonitoringService.log.error(
+ "Error occurred at [runGateScheduler] - fail to start scheduling. Error while fetching Quartz trigger \""
+ + openGateTriggerName + "\"",
+ e);
+ }
- // start the scheduling job
try {
- if (((scheduleGate.getGateStartTimeOffset() == null) && (scheduleGate.getGateEndTimeOffset() == null))
- || ((scheduleGate.getGateStartTimeOffset() != null)
- && (scheduleGate.getGateEndTimeOffset() == null))) {
+ if (openGateTrigger != null) {
+ openGateTrigger = openGateTrigger.getTriggerBuilder()
+ .startAt(scheduleGate.getGateOpenTime(schedulingStartTime)).build();
+ scheduler.rescheduleJob(openGateTrigger.getKey(), openGateTrigger);
+ } else {
+ // create customized triggers
+ openGateTrigger = TriggerBuilder.newTrigger().withIdentity(openGateTriggerName)
+ .startAt(scheduleGate.getGateOpenTime(schedulingStartTime)).build();
scheduler.scheduleJob(openScheduleGateJob, openGateTrigger);
- } else if (openGateTrigger.getStartTime().before(closeGateTrigger.getStartTime())) {
- scheduler.scheduleJob(openScheduleGateJob, openGateTrigger);
- scheduler.scheduleJob(closeScheduleGateJob, closeGateTrigger);
}
+ if (!startGateOnly) {
+ if (closeGateTrigger != null) {
+ closeGateTrigger = closeGateTrigger.getTriggerBuilder()
+ .startAt(scheduleGate.getGateCloseTime(schedulingStartTime)).build();
+ scheduler.rescheduleJob(openGateTrigger.getKey(), closeGateTrigger);
+ } else {
+ // create customized triggers
+ closeGateTrigger = TriggerBuilder.newTrigger()
+ .withIdentity("closeGateTrigger:" + scheduleGate.getActivityId())
+ .startAt(scheduleGate.getGateCloseTime(schedulingStartTime)).build();
+ scheduler.scheduleJob(closeScheduleGateJob, closeGateTrigger);
+ }
+ }
} catch (SchedulerException e) {
- throw new MonitoringServiceException("Error occurred at [runGateScheduler] - fail to start scheduling", e);
+ MonitoringService.log.error(
+ "Error occurred at [runGateScheduler] - fail to start scheduling. Error while setting up gate open/close triggers. Open Gate Trigger name \""
+ + openGateTriggerName + "\"",
+ e);
}
-
if (MonitoringService.log.isDebugEnabled()) {
MonitoringService.log.debug("Scheduler for Gate " + scheduleGate.getActivityId() + " started...");
}
Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateController.java
===================================================================
diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -rbaeb14be8e4c423b2e9ebe3a253c73499051f765
--- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateController.java (.../GateController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50)
+++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GateController.java (.../GateController.java) (revision baeb14be8e4c423b2e9ebe3a253c73499051f765)
@@ -29,6 +29,7 @@
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
+import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.LinkedList;
@@ -257,10 +258,15 @@
} else {
gateForm.setActivityCompletionBased(false);
Lesson lesson = learnerService.getLessonByActivity(scheduleGate);
- Calendar startingTime = new GregorianCalendar(TimeZone.getDefault());
- startingTime.setTime(lesson.getStartDateTime());
- startingTime.add(Calendar.MINUTE, scheduleGate.getGateStartTimeOffset().intValue());
- gateForm.setStartingTime(startingTime.getTime());
+ Date lessonStartingTime = lesson.getStartDateTime();
+ if (lessonStartingTime == null && Lesson.NOT_STARTED_STATE.equals(lesson.getLessonStateId())) {
+ // Assume the lesson will start at the scheduled time
+ lessonStartingTime = lesson.getScheduleStartDate();
+ }
+ Calendar gateStartingTime = new GregorianCalendar(TimeZone.getDefault());
+ gateStartingTime.setTime(lessonStartingTime);
+ gateStartingTime.add(Calendar.MINUTE, scheduleGate.getGateStartTimeOffset().intValue());
+ gateForm.setStartingTime(gateStartingTime.getTime());
}
return "gate/scheduleGateContent";
Index: lams_monitoring/web/gate/scheduleGateContent.jsp
===================================================================
diff -u -r54007f98ca71e0073f19c5db78536437123287c6 -rbaeb14be8e4c423b2e9ebe3a253c73499051f765
--- lams_monitoring/web/gate/scheduleGateContent.jsp (.../scheduleGateContent.jsp) (revision 54007f98ca71e0073f19c5db78536437123287c6)
+++ lams_monitoring/web/gate/scheduleGateContent.jsp (.../scheduleGateContent.jsp) (revision baeb14be8e4c423b2e9ebe3a253c73499051f765)
@@ -54,26 +54,7 @@
shown = true;
}
}
- /*
- function applyDate() {
- var date = $('#scheduleDatetimeField').val();
- if (date) {
- $.ajax({
- url : LAMS_URL + 'monitoring/gate.do',
- cache : false,
- data : {
- 'method' : ??,
- 'openDate' : date
- },
- success : function() {
- refreshMonitor('lesson');
- }
- });
- } else {
- alert('