Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== diff -u -r57589d9a2eb658f07e1769b487bd47a4eb147673 -r21c2c5458bc48ec75db4e917444cca70448b4dea --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 57589d9a2eb658f07e1769b487bd47a4eb147673) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java (.../AuthoringService.java) (revision 21c2c5458bc48ec75db4e917444cca70448b4dea) @@ -930,19 +930,33 @@ SequenceActivity newSequenceActivity = (SequenceActivity) activity; // Need to check if the sets are not null as these are new objects and Hibernate may not have backed them with collections yet. if ( newSequenceActivity.getBranchEntries() != null && newSequenceActivity.getBranchEntries().size() > 0 ) { - Iterator beIter = newSequenceActivity.getBranchEntries().iterator(); - while ( beIter.hasNext() ) { - // sequence activity will be correct but the branching activity and the grouping will be wrong - // the condition was copied by the sequence activity copy - BranchActivityEntry entry = (BranchActivityEntry) beIter.next(); - BranchingActivity oldBranchingActivity = entry.getBranchingActivity(); - entry.setBranchingActivity((BranchingActivity) newActivities.get(LearningDesign.addOffset(oldBranchingActivity.getActivityUIID(), uiidOffset))); - Group oldGroup = entry.getGroup(); - if ( oldGroup != null ) { - Grouping oldGrouping = oldGroup.getGrouping(); - Grouping newGroouping = newGroupings.get(LearningDesign.addOffset(oldGrouping.getGroupingUIID(), uiidOffset)); - entry.setGroup(newGroouping.getGroup(LearningDesign.addOffset(oldGroup.getGroupUIID(), uiidOffset))); - } + + Activity parentActivity = newSequenceActivity.getParentActivity(); + if ( parentActivity.isChosenBranchingActivity() || + ( parentActivity.isGroupBranchingActivity() && parentActivity.getDefineLater()!=null && + parentActivity.getDefineLater().booleanValue())) { + // Don't have any preset up entries for a teacher chosen or a define later group based branching. + // Must be copying a design that was run previously. + newSequenceActivity.getBranchEntries().clear(); + + } else { + Iterator beIter = newSequenceActivity.getBranchEntries().iterator(); + while ( beIter.hasNext() ) { + // sequence activity will be correct but the branching activity and the grouping will be wrong + // the condition was copied by the sequence activity copy + BranchActivityEntry entry = (BranchActivityEntry) beIter.next(); + BranchingActivity oldBranchingActivity = entry.getBranchingActivity(); + entry.setBranchingActivity((BranchingActivity) newActivities.get(LearningDesign.addOffset(oldBranchingActivity.getActivityUIID(), uiidOffset))); + Group oldGroup = entry.getGroup(); + if ( oldGroup != null ) { + Grouping oldGrouping = oldGroup.getGrouping(); + Grouping newGrouping = newGroupings.get(LearningDesign.addOffset(oldGrouping.getGroupingUIID(), uiidOffset)); + if ( newGrouping != null ) { + entry.setGroup(newGrouping.getGroup(LearningDesign.addOffset(oldGroup.getGroupUIID(), uiidOffset))); + } + } + } + } } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java =================================================================== diff -u -r309a597eada52a4079f2985e0d97beedf9adda42 -r21c2c5458bc48ec75db4e917444cca70448b4dea --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision 309a597eada52a4079f2985e0d97beedf9adda42) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ChosenBranchingActivity.java (.../ChosenBranchingActivity.java) (revision 21c2c5458bc48ec75db4e917444cca70448b4dea) @@ -136,6 +136,14 @@ ChosenBranchingActivity newBranchingActivity = new ChosenBranchingActivity(); copyBranchingFields(newBranchingActivity); copyToNewComplexActivity(newBranchingActivity, uiidOffset); + + // Any grouping attached to a teacher chosen branching was either a runtime grouping + // because we are running a runtime copy of a design, or some rubbish left from a bug in authoring. + // We won't actually want this group, so remove references to it and they will be set up + // again when a lesson is started. + newBranchingActivity.setGrouping(null); + newBranchingActivity.setGroupingUIID(null); + newBranchingActivity.setApplyGrouping(false); return newBranchingActivity; } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java =================================================================== diff -u -rdff974ef2462e40cacf7f8c737fc6ec4bb501806 -r21c2c5458bc48ec75db4e917444cca70448b4dea --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision dff974ef2462e40cacf7f8c737fc6ec4bb501806) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolBranchingActivity.java (.../ToolBranchingActivity.java) (revision 21c2c5458bc48ec75db4e917444cca70448b4dea) @@ -133,14 +133,23 @@ } /** - * Makes a copy of the BranchingActivity for authoring, preview and monitoring enviornment + * Makes a copy of the BranchingActivity for authoring, preview and monitoring environment * @return BranchingActivity Returns a deep-copy of the originalActivity */ public Activity createCopy(int uiidOffset){ ToolBranchingActivity newBranchingActivity = new ToolBranchingActivity(); copyBranchingFields(newBranchingActivity); copyToNewComplexActivity(newBranchingActivity, uiidOffset); + + // Any grouping attached to a teacher chosen branching was either a runtime grouping + // because we are running a runtime copy of a design, or some rubbish left from a bug in authoring. + // We won't actually want this group, so remove references to it and they will be set up + // again when a lesson is started. + newBranchingActivity.setGrouping(null); + newBranchingActivity.setGroupingUIID(null); + newBranchingActivity.setApplyGrouping(false); + return newBranchingActivity; }