Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -r5c85cfda092e7e27ab618e86469821a4587f3849 -r8bc8d173f84ddf9333719585a3ddfd7a676f28be --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 5c85cfda092e7e27ab618e86469821a4587f3849) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 8bc8d173f84ddf9333719585a3ddfd7a676f28be) @@ -237,7 +237,9 @@ */ public void performGrouping(Grouping grouping, String groupName, List learners) throws LessonServiceException { - if ( grouping != null && grouping.isChosenGrouping() ) { + if ( grouping != null ) { + // Ensure we have a real grouping object, not just a CGLIB version (LDEV-1817) + grouping = groupingDAO.getGroupingById(grouping.getGroupingId()); Grouper grouper = grouping.getGrouper(); if ( grouper != null ) { grouper.setCommonMessageService(messageService); @@ -248,10 +250,6 @@ } groupingDAO.update(grouping); } - } else { - String error = "The method performChosenGrouping supports only grouping methods where the supplied list should be used as a single group (currently only ChosenGrouping). Called with wrong grouper "+grouping; - log.error(error); - throw new LessonServiceException(error); } } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r5dafa6ad3cc7b265266420295fe76fb6c8d7a9fb -r8bc8d173f84ddf9333719585a3ddfd7a676f28be --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 5dafa6ad3cc7b265266420295fe76fb6c8d7a9fb) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 8bc8d173f84ddf9333719585a3ddfd7a676f28be) @@ -49,7 +49,6 @@ import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.GroupingActivity; -import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.ToolBranchingActivity; @@ -612,10 +611,24 @@ if ( lesson.isPreviewLesson() ) { ArrayList learnerList = new ArrayList(); learnerList.add(learner); - if ( group != null && group.getGroupId() != null ) - lessonService.performGrouping(grouping, group!=null?group.getGroupId():null, learnerList); - else - lessonService.performGrouping(grouping, group.getGroupName(), learnerList); + if ( group != null ) { + if ( group.getGroupId() != null ) + lessonService.performGrouping(grouping, group.getGroupId(), learnerList); + else + lessonService.performGrouping(grouping, group.getGroupName(), learnerList); + } else { + if ( grouping.getGroups().size() > 0 ) { + // if any group exists, put them in there. + Group aGroup = (Group)grouping.getGroups().iterator().next(); + if ( aGroup.getGroupId() != null ) + lessonService.performGrouping(grouping, aGroup.getGroupId(), learnerList); + else + lessonService.performGrouping(grouping, aGroup.getGroupName(), learnerList); + } else { + // just create a group and stick the user in there! + lessonService.performGrouping(grouping, (String)null, learnerList); + } + } groupingDone = true; } return groupingDone; @@ -993,8 +1006,14 @@ } } - // if no groups exist, then create one and assign it to the branch. - } else { + // if no matching groups exist (just to Define in Monitor), then create one and assign it to the branch. + // if it is a chosen grouping, make sure we allow it to go over the normal number of groups (the real groups will exist + // but it too hard to reuse them.) + } else { + if ( grouping.isChosenGrouping() && grouping.getMaxNumberOfGroups() != null ) { + grouping.setMaxNumberOfGroups(null); + } + Group group = lessonService.createGroup(grouping, selectedBranch.getTitle()); group.allocateBranchToGroup(null, selectedBranch, branchingActivity); if ( ! forceGrouping(lesson, grouping, group, learner) ) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -r5863520d75343b47f77b05ad3bd7045a9a39af49 -r8bc8d173f84ddf9333719585a3ddfd7a676f28be --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 5863520d75343b47f77b05ad3bd7045a9a39af49) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 8bc8d173f84ddf9333719585a3ddfd7a676f28be) @@ -59,6 +59,7 @@ public static final String DEFINE_LATER = "previewDefineLater"; public static final String PARAM_ACTIVITY_URL = "activityURL"; + public static final String PARAM_IS_BRANCHING = "isBranching"; /** * Gets an activity from the request (attribute) and forwards onto a @@ -88,6 +89,7 @@ // preview define later request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle()); request.setAttribute(PARAM_ACTIVITY_URL, url); + request.setAttribute(PARAM_IS_BRANCHING, activity.isBranchingActivity()); return mapping.findForward("previewDefineLater"); } else { // normal case