Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml =================================================================== diff -u -r6e041b14d83c90f3f910fac33c7755fca1486b3e -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision 6e041b14d83c90f3f910fac33c7755fca1486b3e) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Activity.hbm.xml (.../Activity.hbm.xml) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 =================================================================== diff -u -r6e041b14d83c90f3f910fac33c7755fca1486b3e -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 6e041b14d83c90f3f910fac33c7755fca1486b3e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 =================================================================== diff -u -r6e041b14d83c90f3f910fac33c7755fca1486b3e -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java (.../BranchingActivityStrategy.java) (revision 6e041b14d83c90f3f910fac33c7755fca1486b3e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/strategy/BranchingActivityStrategy.java (.../BranchingActivityStrategy.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 =================================================================== diff -u -r1c32145e0e416293fdc892cd7a34f808866ce490 -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 1c32145e0e416293fdc892cd7a34f808866ce490) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 =================================================================== diff -u --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (revision 0) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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$$ */ +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 =================================================================== diff -u -r0b15f95c45e3f984eb6b422bb035fb6d9f824e82 -r968fb2185fee5e44b7c4b30e5753805ef05e01df --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision 0b15f95c45e3f984eb6b422bb035fb6d9f824e82) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMappingStrategy.java (.../ActivityMappingStrategy.java) (revision 968fb2185fee5e44b7c4b30e5753805ef05e01df) @@ -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 {