Index: lams_common/conf/language/lams/ApplicationResources.properties =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/language/lams/ApplicationResources.properties,v diff -u -r1.1 -r1.2 --- lams_common/conf/language/lams/ApplicationResources.properties 17 Feb 2007 12:04:00 -0000 1.1 +++ lams_common/conf/language/lams/ApplicationResources.properties 2 Aug 2007 04:22:47 -0000 1.2 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/conf/language/lams/ApplicationResources_en_AU.properties,v diff -u -r1.1 -r1.2 --- lams_common/conf/language/lams/ApplicationResources_en_AU.properties 17 Feb 2007 12:04:00 -0000 1.1 +++ lams_common/conf/language/lams/ApplicationResources_en_AU.properties 2 Aug 2007 04:23:53 -0000 1.2 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java,v diff -u -r1.6 -r1.7 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java 7 Nov 2006 04:59:04 -0000 1.6 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ValidationErrorDTO.java 2 Aug 2007 04:22:30 -0000 1.7 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java,v diff -u -r1.16 -r1.17 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java 31 Jul 2007 06:09:08 -0000 1.16 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/service/LearningDesignService.java 2 Aug 2007 04:22:30 -0000 1.17 @@ -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,