Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java,v diff -u -r1.68 -r1.69 --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java 30 Apr 2008 03:08:27 -0000 1.68 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java 8 May 2008 06:35:03 -0000 1.69 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java,v diff -u -r1.16 -r1.17 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java 10 Apr 2008 00:50:03 -0000 1.16 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/RandomGrouper.java 8 May 2008 06:35:29 -0000 1.17 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java,v diff -u -r1.2 -r1.3 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java 31 Jan 2008 00:12:52 -0000 1.2 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignValidator.java 8 May 2008 06:35:37 -0000 1.3 @@ -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())); } }