Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml,v diff -u -r1.30 -r1.31 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml 8 Jun 2007 06:20:08 -0000 1.30 +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml 11 Jun 2007 23:42:34 -0000 1.31 @@ -263,15 +263,20 @@ @hibernate.class - - @hibernate.class + + + @hibernate.class + public abstract + + @hibernate.class + + + @hibernate.class + + + @hibernate.class + - - @hibernate.class - - - @hibernate.class - Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java,v diff -u -r1.60 -r1.61 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java 8 Jun 2007 06:19:58 -0000 1.60 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java 11 Jun 2007 23:42:33 -0000 1.61 @@ -816,7 +816,7 @@ public boolean isSystemToolActivity() { - return isGateActivity() || isGroupingActivity(); + return isGateActivity() || isGroupingActivity() || isBranchingActivity(); } public boolean isGateActivity() Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java,v diff -u -r1.12 -r1.13 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java 17 Sep 2006 06:14:16 -0000 1.12 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java 11 Jun 2007 23:42:34 -0000 1.13 @@ -130,7 +130,7 @@ { if(randomGrouping.getNumberOfGroups()!=null) { return getNewGroupsByNumberOfGroups(randomGrouping, randomGrouping.getNumberOfGroups(), isInitialization); - } else if(randomGrouping.getLearnersPerGroup()!=null) { + } else if(randomGrouping.getLearnersPerGroup()!=null && randomGrouping.getLearnersPerGroup().intValue()>0) { return getNewGroupsByLearnerPerGroup(randomGrouping,learners); } else { log.warn("Random Grouping id="+randomGrouping.getGroupingId()+" is missing both the number of groups and learners per group. Defaulting to two groups."); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java,v diff -u -r1.2 -r1.3 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java 8 Jun 2007 06:19:58 -0000 1.2 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java 11 Jun 2007 23:42:34 -0000 1.3 @@ -35,7 +35,7 @@ /** - * The progress calculation strategy for branching activity. + * The progress calculation strategy for branching activity. A learner can only do one branch. * * @author Mitchell Seaton * @version 2.1 @@ -54,35 +54,32 @@ /** * @todo The real strategy is ??? * - * For the moment, always get the first branch. + * If there isn't a current child, give it any old branch, otherwise return the NulLActivity (can only do one branch). * * @see org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy#getNextActivityByParent(Activity, Activity) */ public Activity getNextActivityByParent(ComplexActivity activity, Activity currentChild) { - Set children = new TreeSet(new ActivityOrderComparator()); - children.addAll(activity.getActivities()); - Iterator iter = children.iterator(); - if ( iter.hasNext() ) - return (Activity) iter.next(); - + + if ( currentChild == null || currentChild.isNull() ) { + Iterator iter = activity.getActivities().iterator(); + if ( iter.hasNext() ) + return (Activity) iter.next(); + } + return new NullActivity(); } /** * Return the completion status of children activities within a branching - * activity. A branching activity is marked as complete if all children - * activities are completed. + * activity. A branching activity is marked as complete if one child activity (one branch) + * is completed. * * @see org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy#isComplete(int) */ protected boolean isComplete(int numOfCompletedActivities) { - if ( branchingActivity != null ) { - return numOfCompletedActivities==branchingActivity.getActivities().size()?true:false; - } else { - return true; - } + return numOfCompletedActivities == 1; } /** Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java,v diff -u -r1.24 -r1.25 --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java 29 May 2007 11:13:52 -0000 1.24 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java 11 Jun 2007 23:43:00 -0000 1.25 @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.ParallelActivity; import org.lamsfoundation.lams.learningdesign.SequenceActivity; +import org.lamsfoundation.lams.learningdesign.BranchingActivity; import org.lamsfoundation.lams.learningdesign.Transition; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.lesson.LearnerProgress; @@ -242,8 +243,8 @@ //is a sequence activity. if(nextActivity.isSequenceActivity()) { - Activity firstActivityInSequence = - ((SequenceActivity)nextActivity).getFirstActivityInSequenceActivity(); + SequenceActivity sequence = (SequenceActivity) activityDAO.getActivityByActivityId(nextActivity.getActivityId(), SequenceActivity.class); + Activity firstActivityInSequence = sequence.getFirstActivityInSequenceActivity(); learnerProgress.setNextActivity(firstActivityInSequence); } //set next activity as the activity follows the transition. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java 11 Jun 2007 23:43:00 -0000 1.1 @@ -0,0 +1,121 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $$Id: BranchingActivityAction.java,v 1.1 2007/06/11 23:43:00 fmalikoff Exp $$ */ +package org.lamsfoundation.lams.learning.web.action; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; +import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.learning.web.bean.ActivityURL; +import org.lamsfoundation.lams.learning.web.form.OptionsActivityForm; + +import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.BranchingActivity; +import org.lamsfoundation.lams.learningdesign.OptionsActivity; +import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.learning.web.util.ActivityMapping; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; + +/** + * Action class to display an OptionsActivity. + * + * @author daveg + * + * XDoclet definition: + * + * @struts:action path="/branching" name="optionsActivityForm" + * input="/Activity.do" validate="false" scope="request" + * + * @struts:action-forward name="displayBranching" path=".branchingActivity" + * + */ +public class BranchingActivityAction extends ActivityAction { + + + /** + * Gets an options activity from the request (attribute) and forwards to + * the display JSP. + */ + public ActionForward execute( + ActionMapping mapping, + ActionForm actionForm, + HttpServletRequest request, + HttpServletResponse response) { + OptionsActivityForm form = (OptionsActivityForm)actionForm; + ActivityMapping actionMappings = getActivityMapping(); + + ICoreLearnerService learnerService = getLearnerService(); + LearnerProgress learnerProgress = LearningWebUtil.getLearnerProgress(request, learnerService); + Activity activity = LearningWebUtil.getActivityFromRequest(request, learnerService); + if (!(activity instanceof BranchingActivity)) { + log.error(className+": activity not BranchingActivity "+activity.getActivityId()); + return mapping.findForward(ActivityMapping.ERROR); + } + + BranchingActivity branchingActivity = (BranchingActivity)activity; + form.setActivityID(branchingActivity.getActivityId()); + + List activityURLs = new ArrayList(); + Set subActivities = branchingActivity.getActivities(); + Iterator i = subActivities.iterator(); + int completedCount = 0; + while (i.hasNext()) { + Activity subActivity = (Activity)i.next(); + ActivityURL activityURL = new ActivityURL(); + String url = actionMappings.getActivityURL(subActivity); + activityURL.setUrl(url); + activityURL.setActivityId(subActivity.getActivityId()); + activityURL.setTitle(subActivity.getTitle()); + activityURL.setDescription(subActivity.getDescription()); + if (learnerProgress.getProgressState(subActivity) == LearnerProgress.ACTIVITY_COMPLETED) { + activityURL.setComplete(true); + completedCount++; + } + activityURLs.add(activityURL); + } + form.setActivityURLs(activityURLs); + + form.setDescription(branchingActivity.getDescription()); + form.setTitle(branchingActivity.getTitle()); + form.setLessonID(learnerProgress.getLesson().getLessonId()); + form.setProgressID(learnerProgress.getLearnerProgressId()); + + this.saveToken(request); + + setupProgressString(form, request); + + String forward = "displayBranching"; + return mapping.findForward(forward); + } + +} 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.14 -r1.15 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 18 May 2007 07:19:57 -0000 1.14 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java 11 Jun 2007 23:43:00 -0000 1.15 @@ -52,6 +52,10 @@ strutsAction = "/DisplayParallelActivity.do"; else if (activity.isOptionsActivity()) strutsAction = "/DisplayOptionsActivity.do"; + else { + // probably a branching activity + strutsAction = "/LoadToolActivity.do"; + } } else // should be a simple activity - can handle tool, gates and grouping {