Index: lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java =================================================================== diff -u -rf9cf11a96c59e6752e4bdc214a82febf29dfe457 -r3a982b5273a5f1f80b2d9980247061dce057ad98 --- lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java (.../OrganisationGroupAction.java) (revision f9cf11a96c59e6752e4bdc214a82febf29dfe457) +++ lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java (.../OrganisationGroupAction.java) (revision 3a982b5273a5f1f80b2d9980247061dce057ad98) @@ -266,7 +266,7 @@ // check if any groups already exist in this grouping Grouping lessonGrouping = getLessonGrouping(request, activityId, true); Set lessonGroups = lessonGrouping == null ? null : lessonGrouping.getGroups(); - if ((activityId != null) && (orgGroupingId != null) && isDefaultChosenGrouping(lessonGroups)) { + if ((activityId != null) && (orgGroupingId != null) && isDefaultChosenGrouping(lessonGrouping)) { if (OrganisationGroupAction.log.isDebugEnabled()) { OrganisationGroupAction.log.debug("Removing default groups for grouping " + orgGroupingId); } @@ -385,16 +385,16 @@ duplicateCheckProperties.put("organisationId", organisationId); duplicateCheckProperties.put("name", orgGroupingName); - List duplicateOrgGrouping = getUserManagementService() - .findByProperties(OrganisationGrouping.class, duplicateCheckProperties); + List duplicateOrgGrouping = getUserManagementService().findByProperties( + OrganisationGrouping.class, duplicateCheckProperties); if (duplicateOrgGrouping.isEmpty()) { orgGrouping.setName(orgGroupingName); } else { throw new InvalidParameterException("Grouping with name \"" + orgGroupingName + "\" already exists"); } } - + getUserManagementService().saveOrganisationGrouping(orgGrouping, orgGroups); return null; } @@ -506,7 +506,7 @@ request.setAttribute(GroupingAJAXAction.PARAM_USED_FOR_BRANCHING, isUsedForBranching); // check if it is immutable (for branching) or default groups are allowed - return !groups.isEmpty() && (isUsedForBranching || allowDefault || !isDefaultChosenGrouping(groups)) ? grouping + return !groups.isEmpty() && (isUsedForBranching || allowDefault || !isDefaultChosenGrouping(grouping)) ? grouping : null; } } @@ -515,10 +515,14 @@ } /** - * Check if the give groups are default for chosen grouping. + * Check if the give groups are default for chosen grouping. There is actually no good way to detect this, but even + * if a custom grouping is mistaken for the default one, it should bring little harm. */ - private boolean isDefaultChosenGrouping(Set groups) { - if ((groups == null) || (groups.size() != 2)) { + @SuppressWarnings("unchecked") + private boolean isDefaultChosenGrouping(Grouping grouping) { + Set groups = grouping.getGroups(); + if (groups == null || grouping.getMaxNumberOfGroups() == null + || !grouping.getMaxNumberOfGroups().equals(groups.size())) { return false; } for (Group group : groups) {