Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXAction.java =================================================================== diff -u -r33308a6a7d7b29a01697f0274baaccbf9dca6bb3 -rfec1ddd214ce6af20f01e6cb44002a81b426085f --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXAction.java (.../GroupingUploadAJAXAction.java) (revision 33308a6a7d7b29a01697f0274baaccbf9dca6bb3) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadAJAXAction.java (.../GroupingUploadAJAXAction.java) (revision fec1ddd214ce6af20f01e6cb44002a81b426085f) @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; @@ -288,26 +289,21 @@ if (fileElements.size() == 0) { response.sendError(HttpServletResponse.SC_FORBIDDEN, "No file provided"); } - if (GroupingUploadAJAXAction.log.isDebugEnabled()) { - GroupingUploadAJAXAction.log.debug("Saving course groups from spreadsheet for user " + userId + if (log.isDebugEnabled()) { + log.debug("Saving course groups from spreadsheet for user " + userId + " and organisation " + organisationId + " filename " + fileElements); } - JSONObject responseJSON = null; + JSONObject responseJSON = isLessonMode ? saveLessonGrouping(lessonId, activityId, fileElements) + : saveCourseGrouping(organisation, groupingId, name, fileElements); - if ( isLessonMode ) { - responseJSON = saveLessonGrouping(response, activityId, fileElements); - } else { - responseJSON = saveCourseGrouping(response, organisation, groupingId, name, fileElements); - } - response.getWriter().write(responseJSON.toString()); return null; } /** Create the new course grouping */ - private JSONObject saveCourseGrouping(HttpServletResponse response, Organisation organisation, Long orgGroupingId, String name, Hashtable fileElements) + private JSONObject saveCourseGrouping(Organisation organisation, Long orgGroupingId, String name, Hashtable fileElements) throws JSONException, IOException { OrganisationGrouping orgGrouping = null; @@ -322,16 +318,16 @@ } Map existingGroupNameToId = new HashMap(); - Map> groups = new HashMap>(); - if ( orgGrouping.getGroups() != null ) { - for (OrganisationGroup group : orgGrouping.getGroups()) { - existingGroupNameToId.put(group.getName(), group.getGroupId()); - } + if (orgGrouping.getGroups() != null) { + for (OrganisationGroup group : orgGrouping.getGroups()) { + existingGroupNameToId.put(group.getName(), group.getGroupId()); + } } + Map> groups = new HashMap>(); int totalUsersSkipped = parseGroupSpreadsheet((FormFile) fileElements.elements().nextElement(), orgGroupingId, groups); + int totalUsersAdded = 0; - List orgGroups = new LinkedList<>(); for ( Map.Entry> groupEntry : groups.entrySet()) { String groupName = groupEntry.getKey(); @@ -360,18 +356,17 @@ } getUserManagementService().saveOrganisationGrouping(orgGrouping, orgGroups); - return createResponseJSON(response, false, null, true, orgGrouping.getGroupingId(), totalUsersAdded, totalUsersSkipped); + return createResponseJSON(false, null, true, orgGrouping.getGroupingId(), totalUsersAdded, totalUsersSkipped); } /** Clean out and reuse any existing groups */ - private JSONObject saveLessonGrouping(HttpServletResponse response, Long activityId, Hashtable fileElements) + private JSONObject saveLessonGrouping(Long lessonId, Long activityId, Hashtable fileElements) throws JSONException, IOException { IMonitoringService monitoringService = MonitoringServiceProxy .getMonitoringService(getServlet().getServletContext()); - Map> groups = new HashMap>(); int totalUsersSkipped = 0; int totalUsersAdded = 0; @@ -386,10 +381,11 @@ existingGroupNames.add(group.getGroupName()); if (!group.mayBeDeleted()) { String error = getCentralMessageService().getMessage("error.groups.upload.locked"); - return createResponseJSON(response, true, error, true, grouping.getGroupingId(),0, 0); + return createResponseJSON(true, error, true, grouping.getGroupingId(),0, 0); } } + Map> groups = new HashMap>(); totalUsersSkipped = parseGroupSpreadsheet((FormFile) fileElements.elements().nextElement(), grouping.getGroupingId(), groups); // if branching must use the already specified groups or cannot match to a branch! @@ -402,11 +398,32 @@ String error = getCentralMessageService().getMessage( "error.branching.upload.must.use.existing.groups", new String[] { groupNamesStrBlder.toString() }); - return createResponseJSON(response, true, error.toString(), false, grouping.getGroupingId(), 0, 0); + return createResponseJSON(true, error.toString(), false, grouping.getGroupingId(), 0, 0); } } } + + //check all users exist and are learners in the specified lesson + for ( Map.Entry> groupEntry : groups.entrySet()) { + Set logins = groupEntry.getValue(); + Iterator iter = logins.iterator(); + while (iter.hasNext()) { + String login = iter.next(); + User learner = (User) getUserManagementService().getUserByLogin(login); + if (learner == null) { + log.warn("Unable to add learner " + login + " to lesson grouping as learner cannot be found."); + totalUsersSkipped++; + iter.remove(); + + } else if (!getSecurityService().isLessonLearner(lessonId, learner.getUserId(), "be added to grouping", false)) { + //log.warn("Unable to add learner " + login + " to lesson grouping as learner doesn't belong to the lesson."); + totalUsersSkipped++; + iter.remove(); + } + } + } + // remove all the existing users from their groups getLessonService().removeAllLearnersFromGrouping(grouping); @@ -418,11 +435,11 @@ totalUsersSkipped += groupEntry.getValue().size() - added; } - return createResponseJSON(response, false, null, true, grouping.getGroupingId(), totalUsersAdded, totalUsersSkipped); + return createResponseJSON(false, null, true, grouping.getGroupingId(), totalUsersAdded, totalUsersSkipped); } - private JSONObject createResponseJSON(HttpServletResponse response, boolean isError, String errorMessage, - boolean reload, Long groupingId, int totalUsersAdded, int totalUsersSkipped) throws JSONException { + private JSONObject createResponseJSON(boolean isError, String errorMessage, boolean reload, Long groupingId, + int totalUsersAdded, int totalUsersSkipped) throws JSONException { JSONObject responseJSON = new JSONObject(); if (isError) { responseJSON.put("result", "FAIL"); @@ -467,10 +484,10 @@ String groupName = row.getLastCellNum() > 3 ? parseStringCell(row.getCell(3)) : null; groupName = groupName != null ? groupName.trim() : null; if (groupName == null || groupName.length() == 0) { - skipped++; - GroupingUploadAJAXAction.log.warn("Unable to add learner " + login - + " for group in related to grouping " + groupingID + " as group name is missing."); - } else { + skipped++; + log.warn("Unable to add learner " + login + " for group in related to grouping " + groupingID + + " as group name is missing."); + } else { Set users = groups.get(groupName); if (users == null) { users = new HashSet(); @@ -501,40 +518,39 @@ } private IUserManagementService getUserManagementService() { - if (GroupingUploadAJAXAction.userManagementService == null) { + if (userManagementService == null) { WebApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(getServlet().getServletContext()); - GroupingUploadAJAXAction.userManagementService = (IUserManagementService) ctx - .getBean("userManagementService"); + userManagementService = (IUserManagementService) ctx.getBean("userManagementService"); } - return GroupingUploadAJAXAction.userManagementService; + return userManagementService; } private ILessonService getLessonService() { - if (GroupingUploadAJAXAction.lessonService == null) { + if (lessonService == null) { WebApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(getServlet().getServletContext()); - GroupingUploadAJAXAction.lessonService = (ILessonService) ctx.getBean("lessonService"); + lessonService = (ILessonService) ctx.getBean("lessonService"); } - return GroupingUploadAJAXAction.lessonService; + return lessonService; } private ISecurityService getSecurityService() { - if (GroupingUploadAJAXAction.securityService == null) { + if (securityService == null) { WebApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(getServlet().getServletContext()); - GroupingUploadAJAXAction.securityService = (ISecurityService) ctx.getBean("securityService"); + securityService = (ISecurityService) ctx.getBean("securityService"); } - return GroupingUploadAJAXAction.securityService; + return securityService; } private MessageService getCentralMessageService() { - if (GroupingUploadAJAXAction.centralMessageService == null) { + if (centralMessageService == null) { WebApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(getServlet().getServletContext()); - GroupingUploadAJAXAction.centralMessageService = (MessageService) ctx.getBean("centralMessageService"); + centralMessageService = (MessageService) ctx.getBean("centralMessageService"); } - return GroupingUploadAJAXAction.centralMessageService; + return centralMessageService; } }