Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -r514c85e03129ba1c23a495caea70bc88eef0546c -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 Binary files differ Index: lams_build/lib/lams/lams-learning.jar =================================================================== diff -u -r514c85e03129ba1c23a495caea70bc88eef0546c -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 Binary files differ Index: lams_build/lib/lams/lams-monitoring.jar =================================================================== diff -u -r514c85e03129ba1c23a495caea70bc88eef0546c -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -rdab2e119700d02ac373e69b7c3afeeadf1f21d56 -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java =================================================================== diff -u -r209087915bc219f430c282ad00e5d1e6462f9b5f -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 209087915bc219f430c282ad00e5d1e6462f9b5f) +++ lams_central/src/java/org/lamsfoundation/lams/authoring/ObjectExtractor.java (.../ObjectExtractor.java) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -764,7 +764,7 @@ if (numLearnersPerGroup != null && numLearnersPerGroup.intValue() > 0) { learnerChoiceGrouping.setLearnersPerGroup(numLearnersPerGroup); learnerChoiceGrouping.setNumberOfGroups(null); - learnerChoiceGrouping.setEqualNumberOfLearners(null); + learnerChoiceGrouping.setEqualNumberOfLearnersPerGroup(null); } else { Integer numGroups = WDDXProcessor.convertToInteger(groupingDetails, WDDXTAGS.NUMBER_OF_GROUPS); @@ -778,7 +778,7 @@ Boolean equalNumberOfLearnersPerGroup = WDDXProcessor.convertToBoolean(groupingDetails, WDDXTAGS.EQUAL_NUMBER_OF_LEARNERS_PER_GROUP); if (equalNumberOfLearnersPerGroup != null) { - learnerChoiceGrouping.setEqualNumberOfLearners(equalNumberOfLearnersPerGroup); + learnerChoiceGrouping.setEqualNumberOfLearnersPerGroup(equalNumberOfLearnersPerGroup); } } } Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Grouping.hbm.xml =================================================================== diff -u -rc209be8131f22f6fe37bd8d6c14b56425a78b766 -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Grouping.hbm.xml (.../Grouping.hbm.xml) (revision c209be8131f22f6fe37bd8d6c14b56425a78b766) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/learningdesign/Grouping.hbm.xml (.../Grouping.hbm.xml) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -105,7 +105,7 @@ length="11" /> Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearnerChoiceGrouping.java =================================================================== diff -u -rc209be8131f22f6fe37bd8d6c14b56425a78b766 -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearnerChoiceGrouping.java (.../LearnerChoiceGrouping.java) (revision c209be8131f22f6fe37bd8d6c14b56425a78b766) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/LearnerChoiceGrouping.java (.../LearnerChoiceGrouping.java) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -31,7 +31,7 @@ */ public class LearnerChoiceGrouping extends Grouping { /** nullable persistent field */ - private Boolean equalNumberOfLearners; + private Boolean equalNumberOfLearnersPerGroup; /** nullable persistent field */ private Integer numberOfGroups; @@ -57,7 +57,7 @@ public Grouping createCopy(int uiidOffset) { LearnerChoiceGrouping learnerChoiceGrouping = new LearnerChoiceGrouping(); copyGroupingFields(learnerChoiceGrouping, uiidOffset); - learnerChoiceGrouping.setEqualNumberOfLearners(getEqualNumberOfLearners()); + learnerChoiceGrouping.setEqualNumberOfLearnersPerGroup(getEqualNumberOfLearnersPerGroup()); learnerChoiceGrouping.setLearnersPerGroup(getLearnersPerGroup()); learnerChoiceGrouping.setNumberOfGroups(getNumberOfGroups()); return learnerChoiceGrouping; @@ -73,12 +73,12 @@ return true; } - public Boolean getEqualNumberOfLearners() { - return equalNumberOfLearners; + public Boolean getEqualNumberOfLearnersPerGroup() { + return equalNumberOfLearnersPerGroup; } - public void setEqualNumberOfLearners(Boolean equalNumberOfLearners) { - this.equalNumberOfLearners = equalNumberOfLearners; + public void setEqualNumberOfLearnersPerGroup(Boolean equalNumberOfLearnersPerGroup) { + this.equalNumberOfLearnersPerGroup = equalNumberOfLearnersPerGroup; } public Integer getLearnersPerGroup() { Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java =================================================================== diff -u -rc209be8131f22f6fe37bd8d6c14b56425a78b766 -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java (.../GroupingDTO.java) (revision c209be8131f22f6fe37bd8d6c14b56425a78b766) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/GroupingDTO.java (.../GroupingDTO.java) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -48,19 +48,21 @@ private Integer learnersPerGroup; private Long staffGroupID; private Integer maxNumberOfGroups; - private Boolean equalNumberOfLearners; + private Boolean equalNumberOfLearnersPerGroup; //list of GroupDTO private List groups; public GroupingDTO(Long groupingID, Integer groupingUIID, Integer groupingType, Integer numberOfGroups, - Integer learnersPerGroup, Long staffGroupID, Integer maxNumberOfGroups, List groupDTOs) { + Integer learnersPerGroup, Long staffGroupID, Integer maxNumberOfGroups, Boolean equalNumberOfLearnersPerGroup, + List groupDTOs) { this.groupingID = groupingID; this.groupingUIID = groupingUIID; groupingTypeID = groupingType; this.numberOfGroups = numberOfGroups; this.learnersPerGroup = learnersPerGroup; this.staffGroupID = staffGroupID; this.maxNumberOfGroups = maxNumberOfGroups; + this.equalNumberOfLearnersPerGroup = equalNumberOfLearnersPerGroup; groups = groupDTOs; } @@ -112,7 +114,7 @@ private void addLearnerChoiceGroupingAttributes(LearnerChoiceGrouping grouping) { learnersPerGroup = grouping.getLearnersPerGroup(); numberOfGroups = grouping.getNumberOfGroups(); - equalNumberOfLearners = grouping.getEqualNumberOfLearners(); + equalNumberOfLearnersPerGroup = grouping.getEqualNumberOfLearnersPerGroup(); } private void addLessonClassAttributes(LessonClass grouping) { @@ -243,11 +245,11 @@ this.groups = groups; } - public Boolean getEqualNumberOfLearners() { - return equalNumberOfLearners; + public Boolean getEqualNumberOfLearnersPerGroup() { + return equalNumberOfLearnersPerGroup; } - public void setEqualNumberOfLearners(Boolean equalNumberOfLearners) { - this.equalNumberOfLearners = equalNumberOfLearners; + public void setEqualNumberOfLearnersPerGroup(Boolean equalNumberOfLearnersPerGroup) { + equalNumberOfLearnersPerGroup = equalNumberOfLearnersPerGroup; } } Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java =================================================================== diff -u -r209087915bc219f430c282ad00e5d1e6462f9b5f -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 209087915bc219f430c282ad00e5d1e6462f9b5f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/ExportToolContentService.java (.../ExportToolContentService.java) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -2134,7 +2134,7 @@ grouping = new LearnerChoiceGrouping(); ((LearnerChoiceGrouping) grouping).setLearnersPerGroup(groupingDto.getLearnersPerGroup()); ((LearnerChoiceGrouping) grouping).setNumberOfGroups(groupingDto.getNumberOfGroups()); - ((LearnerChoiceGrouping) grouping).setEqualNumberOfLearners(groupingDto.getEqualNumberOfLearners()); + ((LearnerChoiceGrouping) grouping).setEqualNumberOfLearnersPerGroup(groupingDto.getEqualNumberOfLearnersPerGroup()); } else { log.error("Unable to determine the grouping type. Creating a random grouping. GroupingDTO was " + groupingDto); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r209087915bc219f430c282ad00e5d1e6462f9b5f -r6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 209087915bc219f430c282ad00e5d1e6462f9b5f) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 6cbd4eddf683da44fcbf3faed4ae3fe10e8336b8) @@ -607,21 +607,23 @@ User learner = (User) userManagementService.findById(User.class, learnerId); if (learner != null) { - - if (((LearnerChoiceGrouping) grouping).getEqualNumberOfLearners()) { - Integer maxNumberOfLearnersPerGroup = null; - Set groups = grouping.getGroups(); - if (((LearnerChoiceGrouping) grouping).getLearnersPerGroup() == null) { - Lesson lesson = getLesson(lessonId); - int learnerCount = lesson.getAllLearners().size(); - - int groupCount = grouping.getGroups().size(); - maxNumberOfLearnersPerGroup = learnerCount / groupCount + (learnerCount % groupCount == 0 ? 0 : 1); + Integer maxNumberOfLearnersPerGroup = null; + Set groups = grouping.getGroups(); + if (((LearnerChoiceGrouping) grouping).getLearnersPerGroup() == null) { + if (((LearnerChoiceGrouping) grouping).getEqualNumberOfLearnersPerGroup()) { + if (((LearnerChoiceGrouping) grouping).getLearnersPerGroup() == null) { + Lesson lesson = getLesson(lessonId); + int learnerCount = lesson.getAllLearners().size(); + int groupCount = grouping.getGroups().size(); + maxNumberOfLearnersPerGroup = learnerCount / groupCount + + (learnerCount % groupCount == 0 ? 0 : 1); + } } - else { - maxNumberOfLearnersPerGroup = ((LearnerChoiceGrouping) grouping).getLearnersPerGroup(); - } - + } + else { + maxNumberOfLearnersPerGroup = ((LearnerChoiceGrouping) grouping).getLearnersPerGroup(); + } + if (maxNumberOfLearnersPerGroup != null) { for (Group group : groups) { if (group.getGroupId().equals(groupId)) { if (group.getUsers().size() >= maxNumberOfLearnersPerGroup) { @@ -630,6 +632,7 @@ } } } + lessonService.performGrouping(grouping, groupId, learner); return true; } @@ -1169,20 +1172,22 @@ Integer maxNumberOfLearnersPerGroup = null; int learnerCount = lesson.getAllLearners().size(); int groupCount = grouping.getGroups().size(); - if (groupCount == 0) { - ((LearnerChoiceGrouper) grouping.getGrouper()).createGroups(grouping, 2); - groupCount = grouping.getGroups().size(); - groupingDAO.update(grouping); - } if (grouping.getLearnersPerGroup() == null) { - if (grouping.getEqualNumberOfLearners()) { + if (groupCount == 0) { + ((LearnerChoiceGrouper) grouping.getGrouper()).createGroups(grouping, 2); + groupCount = grouping.getGroups().size(); + groupingDAO.update(grouping); + } + if (grouping.getEqualNumberOfLearnersPerGroup()) { maxNumberOfLearnersPerGroup = learnerCount / groupCount + (learnerCount % groupCount == 0 ? 0 : 1); } } else { maxNumberOfLearnersPerGroup = grouping.getLearnersPerGroup(); - if (groupCount * maxNumberOfLearnersPerGroup == learnerCount) { - ((LearnerChoiceGrouper) grouping.getGrouper()).createGroups(grouping, 1); + int desiredGroupCount = learnerCount / maxNumberOfLearnersPerGroup + + (learnerCount % maxNumberOfLearnersPerGroup == 0 ? 0 : 1); + if (desiredGroupCount > groupCount) { + ((LearnerChoiceGrouper) grouping.getGrouper()).createGroups(grouping, desiredGroupCount - groupCount); groupingDAO.update(grouping); } }