Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java =================================================================== diff -u -rb25a6d2d1cebe3c69d4af018aa14198533a0d4c5 -r5a04937692e2c67b3c27bb9ea181635038a6d09f --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision b25a6d2d1cebe3c69d4af018aa14198533a0d4c5) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision 5a04937692e2c67b3c27bb9ea181635038a6d09f) @@ -103,12 +103,33 @@ } /** + * Need to be able to force a user into a particular group for group based branching in preview. + * So this is a non-random random. Bleah! * @throws GroupingException * @see org.lamsfoundation.lams.learningdesign.Grouper#doGrouping(org.lamsfoundation.lams.learningdesign.Grouping,java.lang.Long, java.util.List) */ public void doGrouping(Grouping randomGrouping,Long groupId, List learners) throws GroupingException { - doGrouping(randomGrouping, (String)null, learners); + if ( groupId != null ) { + Iterator iter = randomGrouping.getGroups().iterator(); + Group selectedGroup = null; + while (iter.hasNext() && selectedGroup==null) { + Group group = (Group) iter.next(); + if ( group.getGroupId().equals(groupId) ) { + selectedGroup = group; + } + } + if ( selectedGroup == null ) { + String error = "Tried to add users to group "+groupId+" but group cannot be found."; + log.error(error); + throw new GroupingException(error); + } + selectedGroup.getUsers().addAll(learners); + } else { + // normal random !!! + doGrouping(randomGrouping, (String)null, learners); + } + } //--------------------------------------------------------------------- Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java =================================================================== diff -u -r97612142f4697066beb66064e83ff31fef1712b9 -r5a04937692e2c67b3c27bb9ea181635038a6d09f --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/SequenceActivity.java (.../SequenceActivity.java) (revision 5a04937692e2c67b3c27bb9ea181635038a6d09f) @@ -186,7 +186,7 @@ this.branchEntries = branchEntries; } - /** Get the groups related to this sequence activity, related via the BranchEntries */ + /** Get the groups related to this sequence activity, related via the BranchEntries. */ public SortedSet getGroupsForBranch() { Set mappingEntries = getBranchEntries(); @@ -195,7 +195,12 @@ if ( mappingEntries != null ) { Iterator mappingIter = mappingEntries.iterator(); if ( mappingIter.hasNext() ) { - sortedGroups.add(((BranchActivityEntry) mappingIter.next()).getGroup()); + // Not all the BranchEntries have groups - when in preview, if the user selects a different + // branch to their expected branch then a group may not exist yet. + Group group = ((BranchActivityEntry) mappingIter.next()).getGroup(); + if ( group != null ) { + sortedGroups.add(group); + } } } Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -rb25a6d2d1cebe3c69d4af018aa14198533a0d4c5 -r5a04937692e2c67b3c27bb9ea181635038a6d09f --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision b25a6d2d1cebe3c69d4af018aa14198533a0d4c5) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 5a04937692e2c67b3c27bb9ea181635038a6d09f) @@ -246,13 +246,14 @@ /** * Perform the grouping, setting the given list of learners as one group. Currently used for chosen grouping and - * teacher chosen branching + * teacher chosen branching, and for group based branching in preview (when the user selects a branch that would + * not be their normal branch). * @param grouping The grouping that needs to have the grouping performed.. (mandatory) * @param the id of the preferred group (optional) * @param learners to form one group (mandatory) */ public void performGrouping(Grouping grouping, Long groupId, List learners) throws LessonServiceException { - if ( grouping != null && grouping.isChosenGrouping() ) { + if ( grouping != null ) { Grouper grouper = grouping.getGrouper(); if ( grouper != null ) { grouper.setCommonMessageService(messageService);