Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r75d019d38ef62ddb70c7da1cecd1e5c6029d8644 -rf45a5d1838441e0a57b623a6765d88736cf9f323 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 75d019d38ef62ddb70c7da1cecd1e5c6029d8644) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision f45a5d1838441e0a57b623a6765d88736cf9f323) @@ -1624,30 +1624,33 @@ learners.addAll(lesson.getAllLearners()); } + // same headers are produced for every learner, so we can internationalise them only once + String[] learnerViewHeaders = new String[] { getMessage("gradebook.export.activity"), + getMessage("gradebook.columntitle.startDate"), getMessage("gradebook.columntitle.completeDate"), + getMessage("gradebook.export.time.taken.seconds"), getMessage("gradebook.columntitle.mark") }; + + // process dtos into a map to find corresponding data more easily + Map> activityIdToUserDtoIdMap = activityToUserDTOMap.entrySet().stream() + .collect(Collectors.toMap(e -> e.getKey().getActivityId(), + e -> e.getValue().stream().collect(Collectors.toMap(u -> Integer.valueOf(u.getId()), u -> u)))); + for (User learner : learners) { userTitleRow = learnerViewSheet.initRow(); userTitleRow.addCell(learner.getFullName() + " (" + learner.getLogin() + ")", true); ExcelRow titleRow = learnerViewSheet.initRow(); - titleRow.addCell(getMessage("gradebook.export.activity"), true); - titleRow.addCell(getMessage("gradebook.columntitle.startDate"), true); - titleRow.addCell(getMessage("gradebook.columntitle.completeDate"), true); - titleRow.addCell(getMessage("gradebook.export.time.taken.seconds"), true); - titleRow.addCell(getMessage("gradebook.columntitle.mark"), true); + for (String learnerViewHeader : learnerViewHeaders) { + titleRow.addCell(learnerViewHeader, true); + } Map activityIdToName = new HashMap<>(); for (ToolActivity activity : activityToUserDTOMap.keySet()) { //find userDto corresponding to the user - List userDtos = activityToUserDTOMap.get(activity); - GBUserGridRowDTO userDto = null; - for (GBUserGridRowDTO dbUserDTO : userDtos) { - if (dbUserDTO.getId().equals(learner.getUserId().toString())) { - userDto = dbUserDTO; - } - } + Map userDtoMap = activityIdToUserDtoIdMap.get(activity.getActivityId()); + GBUserGridRowDTO userDto = userDtoMap.get(learner.getUserId()); // userDto will be null if this tool activity was within a branch and the user has not attempted that branch if (userDto != null) {