Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r225d293907a5e2976e367ee3aa790239bad38699 -r76196ada9bc471e4d21168dc1dd7d54d1eb76c46 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 225d293907a5e2976e367ee3aa790239bad38699) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 76196ada9bc471e4d21168dc1dd7d54d1eb76c46) @@ -917,6 +917,9 @@ Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); Integer lessonState = requestedLesson.getLessonStateId(); + // remove any triggers waiting to suspend the lesson + removeScheduleDisableTrigger(requestedLesson); + // if lesson has 'suspended'('disabled') state - then unsuspend it first so its previous lesson state will be 'started' if (Lesson.SUSPENDED_STATE.equals(lessonState)) { unsuspendLesson(lessonId, userId); @@ -931,6 +934,8 @@ public void unarchiveLesson(long lessonId, Integer userId) { securityService.isLessonMonitor(lessonId, userId, "unarchive lesson", true); Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); + // remove any triggers waiting to suspend the lesson + removeScheduleDisableTrigger(requestedLesson); revertLessonState(requestedLesson); } @@ -943,16 +948,20 @@ setLessonState(lesson, Lesson.SUSPENDED_STATE); } if (clearScheduleDetails) { - String triggerName = getFinishLesssonTriggerName(lessonId); - try { - scheduler.unscheduleJob(TriggerKey.triggerKey(triggerName)); - lesson.setScheduleEndDate(null); - } catch (SchedulerException e) { - MonitoringService.log.error("Error while removing lesson suspend trigger \"" + triggerName + "\"", e); - } + removeScheduleDisableTrigger(lesson); } } + private void removeScheduleDisableTrigger(Lesson lesson) { + String triggerName = getFinishLesssonTriggerName(lesson.getLessonId()); + try { + scheduler.unscheduleJob(TriggerKey.triggerKey(triggerName)); + lesson.setScheduleEndDate(null); + } catch (SchedulerException e) { + MonitoringService.log.error("Error while removing lesson suspend trigger \"" + triggerName + "\"", e); + } + } + @Override public void unsuspendLesson(long lessonId, Integer userId) { securityService.isLessonMonitor(lessonId, userId, "unsuspend lesson", true); @@ -962,6 +971,8 @@ if (!Lesson.SUSPENDED_STATE.equals(state)) { throw new MonitoringServiceException("Lesson is not suspended lesson. It can not be unsuspended."); } + // remove any triggers waiting to suspend the lesson + removeScheduleDisableTrigger(lesson); revertLessonState(lesson); } @@ -1070,6 +1081,8 @@ public void removeLesson(long lessonId, Integer userId) { securityService.isLessonMonitor(lessonId, userId, "remove lesson", true); Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); + // remove any triggers waiting to suspend the lesson + removeScheduleDisableTrigger(requestedLesson); setLessonState(requestedLesson, Lesson.REMOVED_STATE); }