Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SynchGateActivityStrategy.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -rb7f7602861fe7878357b23f98b48ed5807b5b1d7 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SynchGateActivityStrategy.java (.../SynchGateActivityStrategy.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/SynchGateActivityStrategy.java (.../SynchGateActivityStrategy.java) (revision b7f7602861fe7878357b23f98b48ed5807b5b1d7) @@ -39,6 +39,8 @@ */ public class SynchGateActivityStrategy extends GateActivityStrategy { + private static final int MINIMUM_NUMBER_OF_LEARNERS = 2; + public SynchGateActivityStrategy(GateActivity gateActivity) { super(gateActivity); } @@ -49,7 +51,9 @@ /** *
Check up the waiting learners list and lesson learner list. If all * lesson learner appears in the waiting list, we assume the open condition - * for the sync gate is met.
+ * for the sync gate is met. A minimum no. of learners must also be waiting at + * the gate to prevent one from racing through it before others have even started + * (LDEV-1773). * *Given that the list of lessonLearners is everyone who has started * the lesson, we can assume that # waiting is less than or equal to # in lesson. @@ -61,14 +65,14 @@ */ protected boolean isOpenConditionMet(List lessonLearners) { + int numWaiting = gateActivity.getWaitingLearners().size(); if ( gateActivity != null ) { - int numWaiting = gateActivity.getWaitingLearners().size(); int numLesson = lessonLearners!=null?lessonLearners.size():0; if ( numWaiting < numLesson ) { return false; } } - return true; + return (numWaiting >= MINIMUM_NUMBER_OF_LEARNERS ? true : false); } /**