Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== RCS file: /usr/local/cvsroot/lams_build/lib/lams/lams-gradebook.jar,v diff -u -r1.6.2.9 -r1.6.2.10 Binary files differ Index: lams_build/lib/lams/lams-learning.jar =================================================================== RCS file: /usr/local/cvsroot/lams_build/lib/lams/lams-learning.jar,v diff -u -r1.51.2.6 -r1.51.2.7 Binary files differ Index: lams_gradebook/.classpath =================================================================== RCS file: /usr/local/cvsroot/lams_gradebook/.classpath,v diff -u -r1.4.2.5 -r1.4.2.6 --- lams_gradebook/.classpath 25 Nov 2014 10:47:25 -0000 1.4.2.5 +++ lams_gradebook/.classpath 18 Nov 2016 07:49:46 -0000 1.4.2.6 @@ -16,5 +16,6 @@ + - + Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_gradebook/.settings/org.eclipse.jdt.ui.prefs'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== RCS file: /usr/local/cvsroot/lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java,v diff -u -r1.36.2.18 -r1.36.2.19 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java 5 Jul 2016 11:07:16 -0000 1.36.2.18 +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java 18 Nov 2016 07:49:46 -0000 1.36.2.19 @@ -88,7 +88,12 @@ import org.lamsfoundation.lams.util.audit.IAuditService; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.lamsfoundation.lams.learning.service.ICoreLearnerService; +import org.lamsfoundation.lams.learning.web.bean.ActivityURL; + /** * * This service handles all gradebook-related service calls @@ -113,6 +118,9 @@ private IActivityDAO activityDAO; private MessageService messageService; private IAuditService auditService; + private static ICoreLearnerService learnerService; + + @Override public List getGBActivityRowsForLearner(Long lessonId, Integer userId) { @@ -123,7 +131,7 @@ List gradebookActivityDTOs = new ArrayList(); - Set activities = getLessonActivities(lesson); + List activities = getLessonActivities(lesson); for (ToolActivity activity : activities) { String groupName = null; @@ -185,7 +193,7 @@ Lesson lesson = lessonService.getLesson(lessonId); List gradebookActivityDTOs = new ArrayList(); - Set activities = getLessonActivities(lesson); + List activities = getLessonActivities(lesson); for (ToolActivity activity : activities) { @@ -721,17 +729,17 @@ return lessonRows; } - private HashMap> getDataForLessonGradebookExport(Lesson lesson) { + private Map> getDataForLessonGradebookExport(Lesson lesson) { - HashMap> activityToUserDTOMap = new HashMap>(); + Map> activityToUserDTOMap = new LinkedHashMap>(); Set learners = new TreeSet(new UserComparator()); if (lesson.getAllLearners() != null) { learners.addAll(lesson.getAllLearners()); } Map userToLearnerProgressMap = getUserToLearnerProgressMap(lesson, null); - Set activities = getLessonActivities(lesson); + List activities = getLessonActivities(lesson); for (ToolActivity activity : activities) { @@ -849,7 +857,7 @@ // -------------------- process activity excel page -------------------------------- - HashMap> activityToUserDTOMap = getDataForLessonGradebookExport(lesson); + Map> activityToUserDTOMap = getDataForLessonGradebookExport(lesson); List rowList1 = new LinkedList(); for (Activity activity : activityToUserDTOMap.keySet()) { @@ -1144,7 +1152,7 @@ // collect users from all lessons Set allLearners = new LinkedHashSet(); - Map> lessonActivitiesMap = new HashMap>(); + Map> lessonActivitiesMap = new HashMap>(); List allActivities = new ArrayList(); for (String lessonIdStr : lessonIds) { @@ -1159,7 +1167,7 @@ allLearners.addAll(lesson.getAllLearners()); - Set lessonActivities = getLessonActivities(lesson); + List lessonActivities = getLessonActivities(lesson); lessonActivitiesMap.put(lesson.getLessonId(), lessonActivities); allActivities.addAll(lessonActivities); } @@ -1191,7 +1199,7 @@ ExcelCell[] lessonsNames = new ExcelCell[numberCellsPerRow]; int i = 4; for (Lesson lesson : selectedLessons) { - Set lessonActivities = lessonActivitiesMap.get(lesson.getLessonId()); + List lessonActivities = lessonActivitiesMap.get(lesson.getLessonId()); int numberActivities = lessonActivities.size(); lessonsNames[i + numberActivities] = new ExcelCell(lesson.getLessonName(), true); i += 9 + (numberActivities * 2); @@ -1215,7 +1223,7 @@ headerRow[i++] = new ExcelCell(getMessage("gradebook.columntitle.startDate"), false); headerRow[i++] = new ExcelCell(getMessage("gradebook.columntitle.completeDate"), false); - Set activities = lessonActivitiesMap.get(lesson.getLessonId()); + List activities = lessonActivitiesMap.get(lesson.getLessonId()); for (Activity activity : activities) { headerRow[i++] = new ExcelCell(activity.getTitle(), true); headerRow[i++] = new ExcelCell(getMessage("label.max.possible"), false); @@ -1244,7 +1252,7 @@ Double lessonTotal = 0d; Double lessonMaxMark = 0d; - Set activities = lessonActivitiesMap.get(lesson.getLessonId()); + List activities = lessonActivitiesMap.get(lesson.getLessonId()); //first, last names and login String lastName = (learner.getLastName() == null) ? "" : learner.getLastName().toUpperCase(); @@ -1355,28 +1363,17 @@ public Activity getActivityById(Long activityID) { return activityDAO.getActivityByActivityId(activityID); } - + + /** * Returns lesson activities. It works almost the same as lesson.getLearningDesign().getActivities() except it * solves problem with first activity unable to cast to ToolActivity. */ - private Set getLessonActivities(Lesson lesson) { - Set activities = new TreeSet(); - Set toolActivities = new TreeSet(); - - /* - * Hibernate CGLIB is failing to load the first activity in the sequence as a ToolActivity for some mysterious - * reason Causes a ClassCastException when you try to cast it, even if it is a ToolActivity. - * - * THIS IS A HACK to retrieve the first tool activity manually so it can be cast as a ToolActivity - if it is - * one - */ - Activity firstActivity = activityDAO - .getActivityByActivityId(lesson.getLearningDesign().getFirstActivity().getActivityId()); - activities.add(firstActivity); - activities.addAll(lesson.getLearningDesign().getActivities()); - - for (Activity activity : activities) { + private List getLessonActivities(Lesson lesson) { + List toolActivities = new ArrayList(); + List activityUrls = getLearnerService().getStructuredActivityURLs(lesson.getLessonId()); + for (ActivityURL activityUrl : activityUrls) { + Activity activity = activityDAO.getActivityByActivityId(activityUrl.getActivityId()); if (activity instanceof ToolActivity) { ToolActivity toolActivity = (ToolActivity) activity; toolActivities.add(toolActivity); @@ -1731,6 +1728,16 @@ return map; } + + + private ICoreLearnerService getLearnerService() { + if (GradebookService.learnerService== null) { + WebApplicationContext ctx = WebApplicationContextUtils + .getWebApplicationContext(SessionManager.getServletContext()); + GradebookService.learnerService = (ICoreLearnerService) ctx.getBean("learnerService"); + } + return GradebookService.learnerService; + } @Override public String getMessage(String key) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java,v diff -u -r1.18.10.7 -r1.18.10.8 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 21 Jun 2016 10:25:33 -0000 1.18.10.7 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java 18 Nov 2016 07:49:57 -0000 1.18.10.8 @@ -24,8 +24,10 @@ package org.lamsfoundation.lams.learning.service; +import java.util.List; import java.util.Set; +import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.bean.GateActivityDTO; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.BranchingActivity; @@ -109,6 +111,9 @@ * in case of problems. */ Object[] getStructuredActivityURLs(Integer learnerId, Long lessonId); + + + List getStructuredActivityURLs(Long lessonId); /** * Return the current progress data against progress id. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== RCS file: /usr/local/cvsroot/lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java,v diff -u -r1.112.2.14 -r1.112.2.15 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 9 Sep 2016 07:24:18 -0000 1.112.2.14 +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java 18 Nov 2016 07:49:57 -0000 1.112.2.15 @@ -43,6 +43,7 @@ import org.lamsfoundation.lams.learning.progress.ProgressEngine; import org.lamsfoundation.lams.learning.progress.ProgressException; import org.lamsfoundation.lams.learning.web.bean.ActivityPositionDTO; +import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learning.web.bean.GateActivityDTO; import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; @@ -415,7 +416,19 @@ return retValue; } + + + @Override + public List getStructuredActivityURLs(Long lessonId) { + Lesson lesson = getLesson(lessonId); + User learner = (User) lesson.getAllLearners().iterator().next(); + LearnerProgress learnerProgress = new LearnerProgress(learner, lesson); + ProgressBuilder builder = new ProgressBuilder(learnerProgress, activityDAO, activityMapping); + builder.parseLearningDesign(); + return builder.getActivityList(); + } + /** * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#chooseActivity(org.lamsfoundation.lams.usermanagement.User, * java.lang.Long, org.lamsfoundation.lams.learningdesign.Activity)