Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -r0d03e65a322050f17bfa0a1f34c4f20eae33953c -r62d0bb09a4512210d42ebd60885c7e1834c0cc5e --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 0d03e65a322050f17bfa0a1f34c4f20eae33953c) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 62d0bb09a4512210d42ebd60885c7e1834c0cc5e) @@ -700,10 +700,20 @@ } private void createRandomGrouping(RandomGrouping randomGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ - if (keyExists(groupingDetails, WDDXTAGS.LEARNERS_PER_GROUP)) - randomGrouping.setLearnersPerGroup(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.LEARNERS_PER_GROUP)); - if (keyExists(groupingDetails, WDDXTAGS.NUMBER_OF_GROUPS)) - randomGrouping.setNumberOfGroups(WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.NUMBER_OF_GROUPS)); + // the two settings are mutually exclusive. Flash takes care of this, but we'll code it here too just to make sure. + Integer numLearnersPerGroup = WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.LEARNERS_PER_GROUP); + if (numLearnersPerGroup!=null && numLearnersPerGroup.intValue()>0) { + randomGrouping.setLearnersPerGroup(numLearnersPerGroup); + randomGrouping.setNumberOfGroups(null); + } else { + Integer numGroups = WDDXProcessor.convertToInteger(groupingDetails,WDDXTAGS.NUMBER_OF_GROUPS); + if (numGroups!=null && numGroups.intValue()>0) { + randomGrouping.setNumberOfGroups(numGroups); + } else { + randomGrouping.setNumberOfGroups(null); + } + randomGrouping.setLearnersPerGroup(null); + } } private void createChosenGrouping(ChosenGrouping chosenGrouping,Hashtable groupingDetails) throws WDDXProcessorConversionException{ //no extra properties as yet Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java =================================================================== diff -u -r418848d6f08966614dea2c347f66295efcae39d4 -r62d0bb09a4512210d42ebd60885c7e1834c0cc5e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision 418848d6f08966614dea2c347f66295efcae39d4) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java (.../RandomGrouper.java) (revision 62d0bb09a4512210d42ebd60885c7e1834c0cc5e) @@ -148,7 +148,7 @@ List learners, boolean isInitialization) { - if(randomGrouping.getNumberOfGroups()!=null) { + if(randomGrouping.getNumberOfGroups()!=null && randomGrouping.getNumberOfGroups().intValue()>0) { return getNewGroupsByNumberOfGroups(randomGrouping, randomGrouping.getNumberOfGroups(), isInitialization); } else if(randomGrouping.getLearnersPerGroup()!=null && randomGrouping.getLearnersPerGroup().intValue()>0) { return getNewGroupsByLearnerPerGroup(randomGrouping,learners); Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java =================================================================== diff -u -r19436c54fbbb9dabb0b769f18e32411f05bbc5e8 -r62d0bb09a4512210d42ebd60885c7e1834c0cc5e --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java (.../LearningDesignValidator.java) (revision 19436c54fbbb9dabb0b769f18e32411f05bbc5e8) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java (.../LearningDesignValidator.java) (revision 62d0bb09a4512210d42ebd60885c7e1834c0cc5e) @@ -365,8 +365,10 @@ } /** - * If this activity is an GroupingActivity and the grouping has some groups, then the number of groups must no exceed the desired number - * of groups.. + * If this activity is an GroupingActivity, the number of groups in the grouping records is greater than 0 and + * the grouping has some groups, then the actual number of groups must no exceed the desired number of groups. + * If the desired number of groups is 0 then don't check the number of actual groups as there is no semantic limit + * to the number of groups. * * @param parentActivity */ @@ -389,7 +391,7 @@ numGroupsInteger = grouping.getMaxNumberOfGroups(); } int maxNumGroups = numGroupsInteger == null ? 0 : numGroupsInteger.intValue(); - if ( grouping.getGroups() != null && grouping.getGroups().size() > maxNumGroups) { + if ( maxNumGroups > 0 && grouping.getGroups() != null && grouping.getGroups().size() > maxNumGroups) { errors.add(new ValidationErrorDTO(ValidationErrorDTO.GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_ERROR_CODE, messageService.getMessage(ValidationErrorDTO.GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_KEY), activity.getActivityUIID())); } }