Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java =================================================================== diff -u -r662af4c9490c6c67127cda6c29d7d806a9e9eaca -rc6305f2e45a7888fb8ea3522d3f2324addd5dd36 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision 662af4c9490c6c67127cda6c29d7d806a9e9eaca) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision c6305f2e45a7888fb8ea3522d3f2324addd5dd36) @@ -24,10 +24,13 @@ package org.lamsfoundation.lams.gradebook.service; import java.util.ArrayList; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedMap; +import java.util.SortedSet; +import java.util.TreeSet; import org.apache.log4j.Logger; import org.lamsfoundation.lams.gradebook.GradeBookUserActivity; @@ -100,14 +103,42 @@ Activity firstActivity = monitoringService.getActivityById(lesson.getLearningDesign().getFirstActivity() .getActivityId()); + long accumulatedTime = 0; + long startTime = 0; + if (learnerProgress != null) { + startTime = learnerProgress.getStartDate().getTime(); + } + if (firstActivity.isToolActivity() && firstActivity instanceof ToolActivity) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(firstActivity, learner, learnerProgress); + long firstActivityTime = 0; + if (learnerProgress != null) { + if (learnerProgress.getCompletedActivities().get(firstActivity) != null) { + firstActivityTime = ((Date) learnerProgress.getCompletedActivities().get(firstActivity)) + .getTime()- startTime - accumulatedTime; + accumulatedTime += firstActivityTime; + } + } + + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(firstActivity, learner, learnerProgress, firstActivityTime); gradeBookActivityDTOs.add(activityDTO); } - for (Activity activity : activities) { + SortedSet sortedActivities = new TreeSet(activities); + + for (Activity activity : sortedActivities) { if (activity.getActivityId().longValue() != firstActivity.getActivityId().longValue()) { - GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(activity, learner, learnerProgress); + + long activityTime = 0; + if (learnerProgress != null) { + if (learnerProgress.getCompletedActivities().get(activity) != null) { + activityTime = ((Date) learnerProgress.getCompletedActivities().get(activity)) + .getTime() - startTime - accumulatedTime; + accumulatedTime += activityTime; + } + + } + + GBActivityGridRowDTO activityDTO = getGradeBookActivityDTO(activity, learner, learnerProgress, activityTime); gradeBookActivityDTOs.add(activityDTO); } } @@ -353,18 +384,17 @@ lessonRow.setLessonId(lesson.getLessonId()); lessonRow.setLessonDescription(lesson.getLessonDescription()); lessonRow.setMark(gradeBookDAO.getAverageMarkForLesson(lesson.getLessonId())); - - + String gbMonURL = Configuration.get(ConfigurationKeys.SERVER_URL) - + "gradebook/gradebookMonitoring.do?lessonID=" + lesson.getLessonId().toString(); - + + "gradebook/gradebookMonitoring.do?lessonID=" + lesson.getLessonId().toString(); + lessonRow.setGradeBookMonitorURL(gbMonURL); if (lesson.getOrganisation().getOrganisationId() != organisation.getOrganisationId()) { - lessonRow.setSubGroup(lesson.getOrganisation().getName()); + lessonRow.setSubGroup(lesson.getOrganisation().getName()); } else { lessonRow.setSubGroup("-"); } - + lessonRows.add(lessonRow); } @@ -459,14 +489,15 @@ * @return */ private GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, User learner, - LearnerProgress learnerProgress) { + LearnerProgress learnerProgress, long activityTime) { logger.debug("Getting gradebook data for activity: " + activity.getActivityId() + ". For user: " + learner.getUserId()); GBActivityGridRowDTO gactivityDTO = new GBActivityGridRowDTO(); gactivityDTO.setActivityId(activity.getActivityId()); gactivityDTO.setActivityTitle(activity.getTitle()); + gactivityDTO.setTimeTakenInMillis(activityTime); GradeBookUserActivity gradeBookActivity = gradeBookDAO.getGradeBookUserDataForActivity( activity.getActivityId(), learner.getUserId()); Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java =================================================================== diff -u -r662af4c9490c6c67127cda6c29d7d806a9e9eaca -rc6305f2e45a7888fb8ea3522d3f2324addd5dd36 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision 662af4c9490c6c67127cda6c29d7d806a9e9eaca) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision c6305f2e45a7888fb8ea3522d3f2324addd5dd36) @@ -159,7 +159,7 @@ } - String ret = GradeBookUtil.toGridXML(gradeBookActivityDTOs, page, rowLimit, method); + String ret = GradeBookUtil.toGridXML(gradeBookActivityDTOs, page, totalPages, method); response.setContentType("text/xml"); PrintWriter out = response.getWriter(); Index: lams_central/web/gradebook/gradeBookMonitor.jsp =================================================================== diff -u -r662af4c9490c6c67127cda6c29d7d806a9e9eaca -rc6305f2e45a7888fb8ea3522d3f2324addd5dd36 --- lams_central/web/gradebook/gradeBookMonitor.jsp (.../gradeBookMonitor.jsp) (revision 662af4c9490c6c67127cda6c29d7d806a9e9eaca) +++ lams_central/web/gradebook/gradeBookMonitor.jsp (.../gradeBookMonitor.jsp) (revision c6305f2e45a7888fb8ea3522d3f2324addd5dd36) @@ -18,9 +18,25 @@ - @@ -310,6 +423,8 @@
+
+ Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java =================================================================== diff -u -r662af4c9490c6c67127cda6c29d7d806a9e9eaca -rc6305f2e45a7888fb8ea3522d3f2324addd5dd36 --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision 662af4c9490c6c67127cda6c29d7d806a9e9eaca) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/GBActivityGridRowDTO.java (.../GBActivityGridRowDTO.java) (revision c6305f2e45a7888fb8ea3522d3f2324addd5dd36) @@ -26,10 +26,10 @@ import java.util.ArrayList; public class GBActivityGridRowDTO extends GradeBookGridRowDTO { - + public static final String VIEW_USER = "userView"; public static final String VIEW_ACTIVITY = "activityView"; - + long activityId; String activityTitle; String competences; @@ -42,6 +42,7 @@ //double timeTaken; Double mark; String feedback; + String timeTaken = "-"; // Properties for activity view Double average; @@ -65,13 +66,17 @@ ret.add(status); ret.add(output); ret.add(competences); + + ret.add(timeTaken); + ret.add(feedback); + if (mark != null) { ret.add(mark.toString()); } else { ret.add("-"); } - + } else if (view.equals(VIEW_ACTIVITY)) { if (monitorUrl != null && monitorUrl.length() != 0) { ret.add("" @@ -180,4 +185,36 @@ public void setMonitorUrl(String monitorUrl) { this.monitorUrl = monitorUrl; } + + + + public void setTimeTakenInMillis(long timeTakenInMillis) { + if (timeTakenInMillis > 1000) { + long totalTimeInSeconds = timeTakenInMillis / 1000; + + long seconds = (totalTimeInSeconds >= 60 ? totalTimeInSeconds % 60 : totalTimeInSeconds); + long minutes = (totalTimeInSeconds = (totalTimeInSeconds / 60)) >= 60 ? totalTimeInSeconds % 60 : totalTimeInSeconds; + long hours = (totalTimeInSeconds = (totalTimeInSeconds / 60)) >= 24 ? totalTimeInSeconds % 24 : totalTimeInSeconds; + long days = (totalTimeInSeconds = (totalTimeInSeconds / 24)); + + StringBuilder sb = new StringBuilder(); + + if (days != 0 ) { sb.append("" + days + "d, "); } + if (hours != 0 ) { sb.append("" + hours + "h, "); } + if (minutes != 0 ) { sb.append("" + minutes + "m, "); } + if (seconds != 0 ) { sb.append("" + seconds + "s"); } + + this.timeTaken = sb.toString(); + } + } + + public String getTimeTaken() { + return timeTaken; + } + + public void setTimeTaken(String timeTaken) { + this.timeTaken = timeTaken; + } + + } Index: lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/comparators/ActivityComparator.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/comparators/ActivityComparator.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/gradebook/dto/comparators/ActivityComparator.java (revision c6305f2e45a7888fb8ea3522d3f2324addd5dd36) @@ -0,0 +1,51 @@ +/**************************************************************** + * Copyright (C) 2008 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.gradebook.dto.comparators; + +import java.util.Comparator; + +import org.lamsfoundation.lams.learningdesign.Activity; + +@SuppressWarnings("unchecked") +public class ActivityComparator implements Comparator{ + + public int compare(Object activity, Object anotherActivity) { + + if (activity instanceof Activity && anotherActivity instanceof Activity) { + + Long activityID1 = ((Activity) activity).getActivityId(); + Long activityID2 = ((Activity) anotherActivity).getActivityId(); + + if (activityID1 == null || activityID2 == null) { + return 0; + } + + Long result = activityID1 - activityID2; + return result.intValue(); + } else { + return 0; + } + } +} + \ No newline at end of file