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
{