Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/gradebook/service/Attic/GradeBookService.java,v diff -u -r1.5 -r1.6 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java 24 Mar 2009 23:35:32 -0000 1.5 +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java 25 Mar 2009 03:05:25 -0000 1.6 @@ -24,7 +24,6 @@ package org.lamsfoundation.lams.gradebook.service; import java.util.ArrayList; -import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -68,19 +67,11 @@ private IGradeBookDAO gradeBookDAO; /** - * Gets a list of GradeBookGridRowDTO for a given lesson and learner - * - * The result should be used for the "user view" of gradebook, where users - * are listed, then expanding a sub-grid will bring up the activites - * - * the mark applies to the ebture kessib - * - * @param lesson - * @param learner - * @return Collection + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBActivityRowsForLearner(org.lamsfoundation.lams.lesson.Lesson, + * org.lamsfoundation.lams.usermanagement.User) */ @SuppressWarnings("unchecked") - public List getUserGradeBookActivityDTOs(Lesson lesson, User learner) { + public List getGBActivityRowsForLearner(Lesson lesson, User learner) { logger.debug("Getting gradebook user data for lesson: " + lesson.getLessonId() + ". For user: " + learner.getUserId()); @@ -119,19 +110,11 @@ } /** - * Gets a list of GradeBookGridRowDTO for a given lesson and learner - * - * The result should be used for the "user view" of gradebook, where users - * are listed, then expanding a sub-grid will bring up the activites - * - * the mark applies to the activity - * - * @param lesson - * @param learner - * @return Collection + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBUserRowsForActivity(org.lamsfoundation.lams.lesson.Lesson, + * org.lamsfoundation.lams.learningdesign.Activity) */ @SuppressWarnings("unchecked") - public List getUserGradeBookActivityDTOs(Lesson lesson, Activity activity) { + public List getGBUserRowsForActivity(Lesson lesson, Activity activity) { List gradeBookUserDTOs = new ArrayList(); @@ -152,7 +135,6 @@ .getLessonId()); gUserDTO.setStatus(getActivityStatusStr(learnerProgress, activity)); - // Set the outputs and activity url, if there is one if (activity.isToolActivity() && activity instanceof ToolActivity) { ToolActivity toolAct = (ToolActivity) activity; @@ -184,24 +166,15 @@ } /** - * Gets the user gradebook and outputs data for a given lesson, which is a - * list of GBActivityGridRowDTO, this one is specifically for the user view - * - * @param lesson - * @param learner - * @return Collection + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBActivityRowsForLesson(org.lamsfoundation.lams.lesson.Lesson) */ @SuppressWarnings("unchecked") - public List getUserGradeBookActivityDTOsActivityView(Lesson lesson, User learner) { + public List getGBActivityRowsForLesson(Lesson lesson) { - logger.debug("Getting gradebook user data for lesson: " + lesson.getLessonId() + ". For user: " - + learner.getUserId()); + logger.debug("Getting gradebook data for lesson: " + lesson.getLessonId()); List gradeBookActivityDTOs = new ArrayList(); - LearnerProgress learnerProgress = monitoringService.getLearnerProgress(learner.getUserId(), lesson - .getLessonId()); - Set activities = (Set) lesson.getLearningDesign().getActivities(); /* @@ -217,68 +190,164 @@ .getActivityId()); if (firstActivity.isToolActivity() && firstActivity instanceof ToolActivity) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(firstActivity, learner, learnerProgress); + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(firstActivity, lesson); gradeBookActivityDTOs.add(activityDTO); } for (Activity activity : activities) { if (activity.getActivityId().longValue() != firstActivity.getActivityId().longValue()) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(activity, learner, learnerProgress); + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(activity, lesson); gradeBookActivityDTOs.add(activityDTO); } } + return gradeBookActivityDTOs; + } /** - * Given a lesson, this method returns the GBUserGridRowDTO for act - * - * @param lesson - * @return + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#getGBUserRowsForLesson(org.lamsfoundation.lams.lesson.Lesson) */ - public List getActivityGradeBookUserDTOs(Lesson lesson) { + @SuppressWarnings("unchecked") + public ArrayList getGBUserRowsForLesson(Lesson lesson) { - logger.debug("Getting gradebook data for lesson: " + lesson.getLessonId()); + ArrayList gradeBookUserDTOs = new ArrayList(); - List gradeBookActivityDTOs = new ArrayList(); + if (lesson != null) { + Set learners = (Set) lesson.getAllLearners(); - Set activities = (Set) lesson.getLearningDesign().getActivities(); + if (learners != null) { - /* - * 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 = monitoringService.getActivityById(lesson.getLearningDesign().getFirstActivity() - .getActivityId()); + for (User learner : learners) { + GBUserGridRowDTO gradeBookUserDTO = new GBUserGridRowDTO(); + gradeBookUserDTO.setLogin(learner.getLogin()); + gradeBookUserDTO.setFirstName(learner.getFirstName()); + gradeBookUserDTO.setLastName(learner.getLastName()); - if (firstActivity.isToolActivity() && firstActivity instanceof ToolActivity) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(firstActivity, lesson); - gradeBookActivityDTOs.add(activityDTO); + // Setting the status for the user's lesson + LearnerProgress learnerProgress = monitoringService.getLearnerProgress(learner.getUserId(), lesson + .getLessonId()); + gradeBookUserDTO.setStatus(getLessonStatusStr(learnerProgress)); + + GradeBookUserLesson gradeBookUserLesson = gradeBookDAO.getGradeBookUserDataForLesson(lesson + .getLessonId(), learner.getUserId()); + if (gradeBookUserLesson != null) { + gradeBookUserDTO.setMark(gradeBookUserLesson.getMark()); + gradeBookUserDTO.setFeedback(gradeBookUserLesson.getFeedback()); + } + gradeBookUserDTOs.add(gradeBookUserDTO); + } + } } - for (Activity activity : activities) { - if (activity.getActivityId().longValue() != firstActivity.getActivityId().longValue()) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(activity, lesson); - gradeBookActivityDTOs.add(activityDTO); + return gradeBookUserDTOs; + + } + + /** + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#updateUserLessonGradeBookMark(org.lamsfoundation.lams.lesson.Lesson, + * org.lamsfoundation.lams.usermanagement.User, java.lang.Double) + */ + public void updateUserLessonGradeBookMark(Lesson lesson, User learner, Double mark) { + if (lesson != null && learner != null) { + GradeBookUserLesson gradeBookUserLesson = gradeBookDAO.getGradeBookUserDataForLesson(lesson.getLessonId(), + learner.getUserId()); + + if (gradeBookUserLesson == null) { + gradeBookUserLesson = new GradeBookUserLesson(lesson, learner); } + gradeBookUserLesson.setMark(mark); + gradeBookDAO.insertOrUpdate(gradeBookUserLesson); } + } - return gradeBookActivityDTOs; + /** + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#updateUserActivityGradeBookMark(org.lamsfoundation.lams.lesson.Lesson, + * org.lamsfoundation.lams.usermanagement.User, + * org.lamsfoundation.lams.learningdesign.Activity, java.lang.Double) + */ + public void updateUserActivityGradeBookMark(Lesson lesson, User learner, Activity activity, Double mark) { + if (lesson != null && activity != null && learner != null && activity.isToolActivity()) { + // First, update the mark for the activity + GradeBookUserActivity gradeBookUserActivity = gradeBookDAO.getGradeBookUserDataForActivity(activity + .getActivityId(), learner.getUserId()); + + if (gradeBookUserActivity == null) { + gradeBookUserActivity = new GradeBookUserActivity((ToolActivity) activity, learner); + } + + gradeBookUserActivity.setMark(mark); + gradeBookDAO.insertOrUpdate(gradeBookUserActivity); + + // Now update the lesson mark + GradeBookUserLesson gradeBookUserLesson = gradeBookDAO.getGradeBookUserDataForLesson(lesson.getLessonId(), + learner.getUserId()); + + if (gradeBookUserLesson == null) { + gradeBookUserLesson = new GradeBookUserLesson(); + gradeBookUserLesson.setLearner(learner); + gradeBookUserLesson.setLesson(lesson); + } + + aggregateTotalMarkForLesson(gradeBookUserLesson); + } } /** - * Gets the gradebook data for a user for a given activity and lesson + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#updateUserLessonGradeBookFeedback(org.lamsfoundation.lams.lesson.Lesson, + * org.lamsfoundation.lams.usermanagement.User, java.lang.String) + */ + public void updateUserLessonGradeBookFeedback(Lesson lesson, User learner, String feedback) { + + GradeBookUserLesson gradeBookUserLesson = gradeBookDAO.getGradeBookUserDataForLesson(lesson.getLessonId(), + learner.getUserId()); + + if (gradeBookUserLesson == null) { + gradeBookUserLesson = new GradeBookUserLesson(lesson, learner); + } + + gradeBookUserLesson.setFeedback(feedback); + gradeBookDAO.insertOrUpdate(gradeBookUserLesson); + } + + /** + * @see org.lamsfoundation.lams.gradebook.service.IGradeBookService#updateUserActivityGradeBookFeedback(org.lamsfoundation.lams.learningdesign.Activity, + * org.lamsfoundation.lams.usermanagement.User, java.lang.String) + */ + public void updateUserActivityGradeBookFeedback(Activity activity, User learner, String feedback) { + + GradeBookUserActivity gradeBookUserActivity = gradeBookDAO.getGradeBookUserDataForActivity(activity + .getActivityId(), learner.getUserId()); + + if (gradeBookUserActivity == null) { + gradeBookUserActivity = new GradeBookUserActivity((ToolActivity) activity, learner); + } + + gradeBookUserActivity.setFeedback(feedback); + gradeBookDAO.insertOrUpdate(gradeBookUserActivity); + } + + /** + * Adds a mark to the aggregated total and saves it * + * @param gradeBookUserLesson + */ + private void aggregateTotalMarkForLesson(GradeBookUserLesson gradeBookUserLesson) { + Double totalMark = gradeBookDAO.getGradeBookUserActivityMarkSum(gradeBookUserLesson.getLesson().getLessonId(), + gradeBookUserLesson.getLearner().getUserId()); + gradeBookUserLesson.setMark(totalMark); + gradeBookDAO.insertOrUpdate(gradeBookUserLesson); + } + + /** + * Gets the GBActivityGridRowDTO fro a given activity and lesson + * * @param activity - * @return GradeBookActivityDTO + * @param lesson + * @return */ - public GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, Lesson lesson) { + private GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, Lesson lesson) { GBActivityGridRowDTO gactivityDTO = new GBActivityGridRowDTO(); gactivityDTO.setActivityId(activity.getActivityId()); gactivityDTO.setActivityTitle(activity.getTitle()); @@ -326,14 +395,15 @@ } /** - * Gets the gradebook data for a user for a given activity and user + * Gets the GBActivityGridRowDTO for a given user and activity * * @param activity * @param learner * @param learnerProgress - * @return GradeBookActivityDTO + * @return */ - public GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, User learner, LearnerProgress learnerProgress) { + private GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, User learner, + LearnerProgress learnerProgress) { logger.debug("Getting gradebook data for activity: " + activity.getActivityId() + ". For user: " + learner.getUserId()); @@ -378,223 +448,19 @@ + "&toolSessionID=" + toolSession.getToolSessionId().toString()); gactivityDTO.setOutput(this.getToolOutputsStr(toolAct, toolSession, learner)); - - // SortedMap map = toolService.getOutputDefinitionsFromTool(toolAct - // .getToolContentId()); - // - // Set toolOutputs = new HashSet(); - // - // - // - // // Setting the tool outputs - // String toolOutputsStr = ""; - // boolean noOutputs = true; - // if (map.keySet().size() > 0) { - // - // for (String outputName : map.keySet()) { - // - // try { - // ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, learner - // .getUserId()); - // - // if (toolOutput != null && toolOutput.getValue().getType() != OutputType.OUTPUT_COMPLEX) { - // toolOutputs.add(toolOutput); - // - // toolOutputsStr += ""; - // - // noOutputs = false; - // } - // - // } catch (RuntimeException e) { - // logger.debug("Runtime exception when attempted to get outputs for activity: " - // + toolAct.getActivityId() + ", continuing for other activities", e); - // } - // } - // toolOutputsStr += ""; - // } - // - // // Fix up outputs html if there are not outputs available - // if (noOutputs) { - // toolOutputsStr = "No output available."; - // } else { - // toolOutputsStr = "