Index: lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java =================================================================== diff -u -r240f5a89847764532283243060c07572f88cc5cf -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java (.../PortfolioBuilder.java) (revision 240f5a89847764532283243060c07572f88cc5cf) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/export/service/PortfolioBuilder.java (.../PortfolioBuilder.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -37,6 +37,7 @@ import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.CompetenceMapping; import org.lamsfoundation.lams.learningdesign.ComplexActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.ISystemToolActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningDesignProcessor; @@ -240,6 +241,10 @@ } } + + public void startFloatingActivity(FloatingActivity activity) throws LearningDesignProcessorException {} + + public void endFloatingActivity(FloatingActivity activity) throws LearningDesignProcessorException {} /** * A system tool may be a simple or a complex activity, so the logic is in a method called by both Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java =================================================================== diff -u -rbd895f79446a2aa68b36bb7f957a8eb3b0487129 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java (.../ProgressBuilder.java) (revision bd895f79446a2aa68b36bb7f957a8eb3b0487129) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressBuilder.java (.../ProgressBuilder.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ComplexActivity; +import org.lamsfoundation.lams.learningdesign.FloatingActivity; import org.lamsfoundation.lams.learningdesign.LearningDesignProcessor; import org.lamsfoundation.lams.learningdesign.SimpleActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; @@ -55,6 +56,7 @@ ArrayList currentActivityList; String forceLearnerURL; boolean previewMode; + boolean isFloating; /** Create the builder. Supply all the data that will be needed to parse the design and build the portfolio entries. * @@ -81,15 +83,17 @@ this.mainActivityList = new ArrayList(); this.currentActivityList = mainActivityList; + this.activityListStack = new ArrayStack(5); Lesson lesson = progress.getLesson(); previewMode = lesson.isPreviewLesson(); - if ( previewMode) { + isFloating = false; + //if ( previewMode ) { // setup the basic call to the learner screen, ready just to put the activity id on the end. Saves calculating it for every activity this.forceLearnerURL = "learner.do?method=forceMoveRedirect&lessonID=" +progress.getLesson().getLessonId()+"&destActivityID="; - } + //} } @@ -102,7 +106,9 @@ if ( activity.isSequenceActivity() ) { return ( progress.getProgressState(activity) != LearnerProgress.ACTIVITY_NOT_ATTEMPTED ); - } + } else if ( activity.isFloatingActivity() ) { + isFloating = true; + } return true; } @@ -136,6 +142,8 @@ complexActivityURL.setChildActivities(currentActivityList); currentActivityList = (ArrayList) activityListStack.pop(); currentActivityList.add(complexActivityURL); + + if(activity.isFloatingActivity()) isFloating = false; } } @@ -150,7 +158,7 @@ currentActivityList.add(p); } - + /** * Creates a progress object with properties activityId, activityName, activityDescription and progress status. * @@ -166,17 +174,18 @@ log.error(error); throw new LearningDesignProcessorException(error); } - ActivityURL activityURL = LearningWebUtil.getActivityURL( activityMapping, progress, activity, false); - if ( activityURL.getStatus() == LearnerProgress.ACTIVITY_NOT_ATTEMPTED ) { - activityURL.setUrl( previewMode? forceLearnerURL+activity.getActivityId() : null); + ActivityURL activityURL = LearningWebUtil.getActivityURL( activityMapping, progress, activity, false, isFloating); + if ( activityURL.getStatus() == LearnerProgress.ACTIVITY_NOT_ATTEMPTED && isFloating) { + activityURL.setUrl( (previewMode || isFloating) ? forceLearnerURL+activity.getActivityId() : null); } + if (activity.isFloatingActivity()) { + activityURL.setUrl(null); + } return activityURL; } /** Get the list of all the activity progress DTOs, which in turn may contain other activity progress DTOs */ public ArrayList getActivityList() { return mainActivityList; } - - } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java =================================================================== diff -u -r96b3b3ff3f62e1bca1d299f75f512995388e420b -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision 96b3b3ff3f62e1bca1d299f75f512995388e420b) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/progress/ProgressEngine.java (.../ProgressEngine.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -96,6 +96,9 @@ } populateCurrentCompletedActivityList(learnerProgress, completedActivityList); return setLessonComplete(learnerProgress, LearnerProgress.LESSON_IN_DESIGN_COMPLETE); + } else if ( completedActivity.isFloating() ) { + // special case - floating activity + return learnerProgress; } else { Transition transition = completedActivity.getTransitionFrom(); if (transition != null) @@ -300,6 +303,7 @@ parent.getActivityTypeId()+" has been found"); //move to next activity within parent if not all children are completed. + ComplexActivity complexParent = (ComplexActivity) activityDAO.getActivityByActivityId(parent.getActivityId(),ComplexActivity.class); if (! learnerProgress.getCompletedActivities().contains(complexParent) && !complexParent.areChildrenCompleted(learnerProgress)) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r8386a3fecd9c7baf6ed69d499016dedd8a83eac6 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 8386a3fecd9c7baf6ed69d499016dedd8a83eac6) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -381,10 +381,9 @@ ProgressBuilder builder = new ProgressBuilder(progress, activityDAO, activityMapping); builder.parseLearningDesign(); - List list = builder.getActivityList(); Object[] retValue = new Object[2]; - retValue[0] = list; + retValue[0] = (List) builder.getActivityList();; retValue[1] = progress.getCurrentActivity() != null ? progress.getCurrentActivity().getActivityId() : null; return retValue; @@ -434,7 +433,8 @@ if (toActivity != null) { progress.setProgressState(toActivity, LearnerProgress.ACTIVITY_ATTEMPTED, activityDAO); - progress.setCurrentActivity(toActivity); + if(!toActivity.isFloating()) + progress.setCurrentActivity(toActivity); progress.setNextActivity(toActivity); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java =================================================================== diff -u -r07d6aab3c681c1f2ecb8041756e99567ed639f31 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision 07d6aab3c681c1f2ecb8041756e99567ed639f31) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/BranchingActivityAction.java (.../BranchingActivityAction.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -133,7 +133,7 @@ while (i.hasNext()) { Activity nextBranch = (Activity)i.next(); ActivityURL activityURL = LearningWebUtil.getActivityURL( actionMappings, learnerProgress, - nextBranch, branch != null && branch.equals(nextBranch)); + nextBranch, branch != null && branch.equals(nextBranch), false); if ( activityURL.isComplete() ) { completedCount++; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java =================================================================== diff -u -r5fdd0db818db4e588ee274e14be36b37aea7641c -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision 5fdd0db818db4e588ee274e14be36b37aea7641c) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/DisplayOptionsActivityAction.java (.../DisplayOptionsActivityAction.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -90,7 +90,7 @@ Iterator i = subActivities.iterator(); int completedCount = 0; while (i.hasNext()) { - ActivityURL activityURL = LearningWebUtil.getActivityURL( actionMappings, learnerProgress, (Activity)i.next(), false); + ActivityURL activityURL = LearningWebUtil.getActivityURL( actionMappings, learnerProgress, (Activity)i.next(), false, false); if ( activityURL.isComplete() ) { completedCount++; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/bean/ActivityURL.java =================================================================== diff -u -r472bcb813040efc160e074021be5c71c15455f00 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/bean/ActivityURL.java (.../ActivityURL.java) (revision 472bcb813040efc160e074021be5c71c15455f00) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/bean/ActivityURL.java (.../ActivityURL.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -44,6 +44,7 @@ private String title; private String description; private boolean complete; + private boolean floating; private byte status; private boolean defaultURL; private List childActivities; @@ -55,6 +56,7 @@ { this.activityId = activityId; this.url = url; + this.floating = false; } public boolean isComplete() { @@ -63,6 +65,15 @@ public void setComplete(boolean complete) { this.complete = complete; } + public boolean isFloating() { + return floating; + } + public boolean getFloating() { + return floating; + } + public void setFloating(boolean floating) { + this.floating = floating; + } public String getTitle() { return title; } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java =================================================================== diff -u -rcacc57acef235b8509cdf8c627f4e0b2b382c1a3 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision cacc57acef235b8509cdf8c627f4e0b2b382c1a3) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -225,6 +225,9 @@ progress = learnerService.completeActivity(learnerId, currentActivity,progress); } + if ( progress == null ) + return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); + LearningWebUtil.putActivityInRequest(request, progress.getNextActivity(), learnerService); LearningWebUtil.putLearnerProgressInRequest(request,progress); return actionMappings.getProgressForward(progress, redirect, false, request, learnerService); @@ -339,7 +342,7 @@ return progressSummary.toString(); } - public static ActivityURL getActivityURL( ActivityMapping activityMapping, LearnerProgress learnerProgress, Activity activity, boolean defaultURL) { + public static ActivityURL getActivityURL( ActivityMapping activityMapping, LearnerProgress learnerProgress, Activity activity, boolean defaultURL, boolean isFloating) { ActivityURL activityURL = new ActivityURL(); String url = activityMapping.getActivityURL(activity); activityURL.setUrl(url); @@ -352,7 +355,7 @@ if ( status == LearnerProgress.ACTIVITY_COMPLETED) { activityURL.setComplete(true); } - + activityURL.setFloating(isFloating); activityURL.setDefaultURL(defaultURL); return activityURL; } Index: lams_learning/web/WEB-INF/tags/ProgressOutput.tag =================================================================== diff -u -r4f68a533e24967e0185132c5e361a8a054f43941 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/web/WEB-INF/tags/ProgressOutput.tag (.../ProgressOutput.tag) (revision 4f68a533e24967e0185132c5e361a8a054f43941) +++ lams_learning/web/WEB-INF/tags/ProgressOutput.tag (.../ProgressOutput.tag) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -58,7 +58,19 @@ - + + + + + + + + + + + + + ${activity.title} Index: lams_learning/web/progress.jsp =================================================================== diff -u -r308382123748b7f9693472763d2d125ca73f42f0 -re4c92abe243b6367ad45115df3e1f5ecec5e5de7 --- lams_learning/web/progress.jsp (.../progress.jsp) (revision 308382123748b7f9693472763d2d125ca73f42f0) +++ lams_learning/web/progress.jsp (.../progress.jsp) (revision e4c92abe243b6367ad45115df3e1f5ecec5e5de7) @@ -44,7 +44,9 @@
    - + +

     

    +