Index: lams_common/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r37f37232425f69438bd363e73a66ab7a8ada3345 -r03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd --- lams_common/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 37f37232425f69438bd363e73a66ab7a8ada3345) +++ lams_common/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd) @@ -36,6 +36,7 @@ error.import.tool.service.fail =Unable to import tool content for tool {0}. Caused by {1}. error.no.valid.tool =No valid tools in this learning design. import.shareresources.warning =The sequence contains one or more Share Resources activities. Please check these activities as any file or uploaded websites in the activity will be invalid and will cause an error for the learners. Links to external websites should not cause any errors. +validation.error.grouping.missing=Grouping object for the grouping activity is missing. +validation.error.group.count.mismatch=Grouping has more groups than the requested number of groups. - #======= End labels: Exported 30 labels for en AU ===== Index: lams_common/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r37f37232425f69438bd363e73a66ab7a8ada3345 -r03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd --- lams_common/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 37f37232425f69438bd363e73a66ab7a8ada3345) +++ lams_common/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd) @@ -36,6 +36,8 @@ error.import.tool.service.fail =Unable to import tool content for tool {0}. Caused by {1}. error.no.valid.tool =No valid tools in this learning design. import.shareresources.warning =The sequence contains one or more Share Resources activities. Please check these activities as any file or uploaded websites in the activity will be invalid and will cause an error for the learners. Links to external websites should not cause any errors. +validation.error.grouping.missing=Grouping object for the grouping activity is missing. +validation.error.group.count.mismatch=Grouping has more groups than the requested number of groups. #======= End labels: Exported 30 labels for en AU ===== Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java =================================================================== diff -u -rf07be6df99f4f8ffb45221f7c4c7ffdf2f24525e -r03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java (.../ValidationErrorDTO.java) (revision f07be6df99f4f8ffb45221f7c4c7ffdf2f24525e) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java (.../ValidationErrorDTO.java) (revision 03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd) @@ -45,6 +45,8 @@ public static final String OPTIONAL_ACTIVITY_ORDER_ID_INVALID_ERROR_KEY = "validation.error.OptionalActivityOrderId"; // OAOI public static final String SCHEDULE_GATE_ERROR_TYPE1_KEY = "validation.error.illegalScheduleGateOffsetsType1"; // SG public static final String SCHEDULE_GATE_ERROR_TYPE2_KEY = "validation.error.illegalScheduleGateOffsetsType2"; + public static final String GROUPING_ACTIVITY_MISSING_GROUPING_KEY = "validation.error.grouping.missing"; // GM + public static final String GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_KEY = "validation.error.group.count.mismatch"; // GC public static final String OTHER_ERROR_CODE = "O"; public static final String TRANSITION_ERROR_CODE = "T"; @@ -57,6 +59,8 @@ public static final String OPTIONAL_ACTIVITY_ERROR_CODE = "OA"; public static final String OPTIONAL_ACTIVITY_ORDER_ID_INVALID_ERROR_CODE = "OAOI"; public static final String SCHEDULE_GATE_ERROR_CODE = "SG1"; + public static final String GROUPING_ACTIVITY_MISSING_GROUPING_ERROR_CODE = "GM"; + public static final String GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_ERROR_CODE = "GC"; private static MessageResources resources = MessageResources.getMessageResources(CONFIG_PARAM); @@ -138,6 +142,16 @@ */ public static final String SCHEDULE_GATE_ERROR_TYPE2 = resources.getMessage(SCHEDULE_GATE_ERROR_TYPE2_KEY); + /** + * Rule: For Grouping Activities there must be a grouping. + */ + public static final String GROUPING_ACTIVITY_MISSING_GROUPING = resources.getMessage(GROUPING_ACTIVITY_MISSING_GROUPING_KEY); // GM + + /** + * Rule: For Grouping Activities the number of groups must be less than or equal to the desired number. + */ + public static final String GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH = resources.getMessage(GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_KEY); // GC + private Integer UIID; private String message; //the validation message explaining what the problem is private String code; // unique code representing the validation error message Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java =================================================================== diff -u -rb25a6d2d1cebe3c69d4af018aa14198533a0d4c5 -r03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision b25a6d2d1cebe3c69d4af018aa14198533a0d4c5) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java (.../LearningDesignService.java) (revision 03fb29dacad3f77cacd7dc5ae21f5c58c9c838bd) @@ -35,9 +35,11 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.Grouping; +import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningLibrary; import org.lamsfoundation.lams.learningdesign.OptionsActivity; +import org.lamsfoundation.lams.learningdesign.RandomGrouping; import org.lamsfoundation.lams.learningdesign.Transition; import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.GroupingDAO; @@ -342,6 +344,7 @@ validateGroupingIfGroupingIsApplied(activity, listOfValidationErrorDTOs); validateOptionalActivity(activity, listOfValidationErrorDTOs); validateOptionsActivityOrderId(activity, listOfValidationErrorDTOs); + validateGroupingActivity(activity, listOfValidationErrorDTOs); Vector activityErrors = activity.validateActivity(messageService); if(activityErrors != null && !activityErrors.isEmpty()) listOfValidationErrorDTOs.addAll(activityErrors); @@ -409,6 +412,38 @@ } /** + * 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.. + * + * @param parentActivity + */ + private void validateGroupingActivity(Activity activity, Vector listOfValidationErrorDTOs) + { + + if (activity.isGroupingActivity()) + { + //get the child activities and check how many there are. + GroupingActivity groupingActivity = (GroupingActivity)activity; + Grouping grouping = groupingActivity.getCreateGrouping(); + if ( grouping == null ) { + listOfValidationErrorDTOs.add(new ValidationErrorDTO(ValidationErrorDTO.GROUPING_ACTIVITY_MISSING_GROUPING_ERROR_CODE, messageService.getMessage(ValidationErrorDTO.GROUPING_ACTIVITY_MISSING_GROUPING_KEY), activity.getActivityUIID())); + } + Integer numGroupsInteger = null; + if ( grouping.isRandomGrouping() ) { + RandomGrouping random = (RandomGrouping) grouping; + numGroupsInteger = random.getNumberOfGroups(); + } else { + numGroupsInteger = grouping.getMaxNumberOfGroups(); + } + int maxNumGroups = numGroupsInteger == null ? 0 : numGroupsInteger.intValue(); + if ( grouping.getGroups() != null && grouping.getGroups().size() > maxNumGroups) { + listOfValidationErrorDTOs.add(new ValidationErrorDTO(ValidationErrorDTO.GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_ERROR_CODE, messageService.getMessage(ValidationErrorDTO.GROUPING_ACTIVITY_GROUP_COUNT_MISMATCH_KEY), activity.getActivityUIID())); + } + } + + } + + /** * This method ensures that the order id of the optional activities * start from 1, are sequential and do not contain any duplicates. * It will iterate through the child activities of the OptionalActivity,