Index: lams_build/lib/lams/lams-gradebook.jar =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 Binary files differ Index: lams_build/lib/lams/lams-learning.jar =================================================================== diff -u -rd19a95db673b7cf90351de4d567299c5fa86b450 -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 Binary files differ Index: lams_gradebook/.classpath =================================================================== diff -u -r0fdf00ad8ffebc0cc6d79de96a216c08ce0d4cdf -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 --- lams_gradebook/.classpath (.../.classpath) (revision 0fdf00ad8ffebc0cc6d79de96a216c08ce0d4cdf) +++ lams_gradebook/.classpath (.../.classpath) (revision 72f92afa07d5c5d0e6051081a1d0e1890ce934d5) @@ -16,5 +16,6 @@ + - + Index: lams_gradebook/.settings/org.eclipse.jdt.ui.prefs =================================================================== diff -u --- lams_gradebook/.settings/org.eclipse.jdt.ui.prefs (revision 0) +++ lams_gradebook/.settings/org.eclipse.jdt.ui.prefs (revision 72f92afa07d5c5d0e6051081a1d0e1890ce934d5) @@ -0,0 +1,59 @@ +cleanup.add_default_serial_version_id=true +cleanup.add_generated_serial_version_id=false +cleanup.add_missing_annotations=true +cleanup.add_missing_deprecated_annotations=true +cleanup.add_missing_methods=false +cleanup.add_missing_nls_tags=false +cleanup.add_missing_override_annotations=true +cleanup.add_missing_override_annotations_interface_methods=true +cleanup.add_serial_version_id=false +cleanup.always_use_blocks=true +cleanup.always_use_parentheses_in_expressions=true +cleanup.always_use_this_for_non_static_field_access=false +cleanup.always_use_this_for_non_static_method_access=false +cleanup.convert_functional_interfaces=false +cleanup.convert_to_enhanced_for_loop=false +cleanup.correct_indentation=true +cleanup.format_source_code=true +cleanup.format_source_code_changes_only=false +cleanup.insert_inferred_type_arguments=false +cleanup.make_local_variable_final=true +cleanup.make_parameters_final=false +cleanup.make_private_fields_final=true +cleanup.make_type_abstract_if_missing_method=false +cleanup.make_variable_declarations_final=false +cleanup.never_use_blocks=false +cleanup.never_use_parentheses_in_expressions=false +cleanup.organize_imports=true +cleanup.qualify_static_field_accesses_with_declaring_class=false +cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true +cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true +cleanup.qualify_static_member_accesses_with_declaring_class=true +cleanup.qualify_static_method_accesses_with_declaring_class=true +cleanup.remove_private_constructors=true +cleanup.remove_redundant_type_arguments=true +cleanup.remove_trailing_whitespaces=true +cleanup.remove_trailing_whitespaces_all=true +cleanup.remove_trailing_whitespaces_ignore_empty=false +cleanup.remove_unnecessary_casts=false +cleanup.remove_unnecessary_nls_tags=true +cleanup.remove_unused_imports=true +cleanup.remove_unused_local_variables=false +cleanup.remove_unused_private_fields=true +cleanup.remove_unused_private_members=false +cleanup.remove_unused_private_methods=true +cleanup.remove_unused_private_types=true +cleanup.sort_members=false +cleanup.sort_members_all=false +cleanup.use_anonymous_class_creation=false +cleanup.use_blocks=true +cleanup.use_blocks_only_for_return_and_throw=false +cleanup.use_lambda=true +cleanup.use_parentheses_in_expressions=false +cleanup.use_this_for_non_static_field_access=false +cleanup.use_this_for_non_static_field_access_only_if_necessary=true +cleanup.use_this_for_non_static_method_access=false +cleanup.use_this_for_non_static_method_access_only_if_necessary=true +cleanup_profile=_LAMS Clean up +cleanup_settings_version=2 +eclipse.preferences.version=1 Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r9d26fef875be83090f3f33b0240490aad5fab7be -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 9d26fef875be83090f3f33b0240490aad5fab7be) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 72f92afa07d5c5d0e6051081a1d0e1890ce934d5) @@ -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 =================================================================== diff -u -r14c33274b785517e5e3f6a7642dc7c6752a34411 -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 14c33274b785517e5e3f6a7642dc7c6752a34411) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 72f92afa07d5c5d0e6051081a1d0e1890ce934d5) @@ -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 =================================================================== diff -u -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 -r72f92afa07d5c5d0e6051081a1d0e1890ce934d5 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 72f92afa07d5c5d0e6051081a1d0e1890ce934d5) @@ -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)