Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java,v diff -u -r1.16 -r1.17 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java 4 Apr 2005 13:25:55 -0000 1.16 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java 7 Apr 2005 05:15:17 -0000 1.17 @@ -24,6 +24,7 @@ import java.util.List; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -163,5 +164,12 @@ */ public void performGrouping(GroupingActivity groupingActivity, User learner); - + /** + * Check up the gate status to go through the gate. + * @param gate the gate that current learner is facing. It could be + * synch gate, schedule gate or permission gate. + * @param knocker the learner who wants to go through the gate. + * @param lessonLearners the entire lesson learners. + */ + public boolean knockGate(GateActivity gate,User knocker,List lessonLearners); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java,v diff -u -r1.27 -r1.28 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 4 Apr 2005 13:25:55 -0000 1.27 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 7 Apr 2005 05:15:17 -0000 1.28 @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; @@ -353,6 +354,25 @@ groupingDAO.update(grouping); } + + /** + * @see org.lamsfoundation.lams.learning.service.ILearnerService#knockGate(org.lamsfoundation.lams.learningdesign.GateActivity, org.lamsfoundation.lams.usermanagement.User, java.util.List) + */ + public boolean knockGate(GateActivity gate, User knocker, List lessonLearners) + { + boolean gateOpen = false; + //knock the gate. + if(gate.shouldOpenGateFor(knocker,lessonLearners)) + gateOpen = true; + else + gateOpen = false; + + //update gate including updating the waiting list and gate status in + //the database. + activityDAO.update(gate); + + return gateOpen; + } //--------------------------------------------------------------------- // Helper Methods //--------------------------------------------------------------------- @@ -456,5 +476,4 @@ { return this.lessonDAO.getActiveLearnerByLesson(lessonId); } - } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GateAction.java 7 Apr 2005 05:15:17 -0000 1.1 @@ -0,0 +1,89 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.learning.web.action; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; +import org.lamsfoundation.lams.web.action.LamsDispatchAction; + + +/** + * + * @author Jacky Fang + * @since 2005-4-7 + * @version 1.1 + * + * ----------------XDoclet Tags-------------------- + * + * @struts:action name = "GroupingForm" + * path="/grouping" + * parameter="method" + * validate="false" + * @struts.action-exception key="error.system.learner" scope="request" + * type="org.lamsfoundation.lams.learning.service.LearnerServiceException" + * path=".systemError" + * handler="org.lamsfoundation.lams.util.CustomStrutsExceptionHandler" + * @struts:action-forward name="viewGrouping" path="/grouping.do?method=viewGrouping" + * @struts:action-forward name="showGroup" path=".grouping" + * ----------------XDoclet Tags-------------------- + */ +public class GateAction extends LamsDispatchAction +{ + + //--------------------------------------------------------------------- + // Instance variables + //--------------------------------------------------------------------- + private static Logger log = Logger.getLogger(GateAction.class); + + + //--------------------------------------------------------------------- + // Struts Dispatch Method + //--------------------------------------------------------------------- + + /** + * + * @param mapping + * @param form + * @param request + * @param response + * @return + * @throws IOException + * @throws ServletException + */ + public ActionForward checkUpGate(ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws IOException, + ServletException + { + return mapping.findForward(null); + } +} Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java,v diff -u -r1.4 -r1.5 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 31 Mar 2005 07:36:22 -0000 1.4 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 7 Apr 2005 05:15:17 -0000 1.5 @@ -60,6 +60,7 @@ if (activity instanceof GroupingActivity) strutsAction = "/grouping.do?"; if (activity instanceof GateActivity) { + strutsAction = "/gate.do"; // not completed so return wait URL } if (activity instanceof ToolActivity) Index: lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/test/java/org/lamsfoundation/lams/learning/service/Attic/TestLearnerService.java,v diff -u -r1.16 -r1.17 --- lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java 7 Apr 2005 02:24:16 -0000 1.16 +++ lams_learning/test/java/org/lamsfoundation/lams/learning/service/TestLearnerService.java 7 Apr 2005 05:15:17 -0000 1.17 @@ -20,11 +20,15 @@ */ package org.lamsfoundation.lams.learning.service; +import java.util.LinkedList; +import java.util.List; + import org.apache.log4j.Logger; import org.lamsfoundation.lams.AbstractLamsTestCase; import org.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.GateActivity; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.OptionsActivity; @@ -302,6 +306,44 @@ assertTrue("verify the existance of test user",randomGrouping.doesLearnerExist(testUser)); } + + public void testKnockSynchGateClosed() + { + //setup lesson learner list + List lessonLearners = new LinkedList(); + lessonLearners.add(testUser); + User testUser2= usermanageService.getUserById(new Integer(1)); + lessonLearners.add(testUser2); + + //get sync gate + GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); + + boolean gateOpen = learnerService.knockGate(synchGate,testUser,lessonLearners); + + assertTrue("gate is closed",!gateOpen); + synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); + + assertEquals("one learner is waiting",1,synchGate.getWaitingLearners().size()); + } + + public void testKnockSynchGateOpen() + { + List lessonLearners = new LinkedList(); + lessonLearners.add(testUser); + User testUser2= usermanageService.getUserById(new Integer(1)); + lessonLearners.add(testUser2); + + //get sync gate + GateActivity synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); + + boolean gateOpen = learnerService.knockGate(synchGate,testUser2,lessonLearners); + assertTrue("gate is closed",gateOpen); + + synchGate = (GateActivity)learnerService.getActivity(new Long(TEST_SYNCHGATE_ACTIVITY_ID)); + + assertEquals("Gate opened, no one should be waiting",0,synchGate.getWaitingLearners().size()); + + } /** * @param numberOfAttemptedAct * @param testCompletedActivity