/********************************************************************************** * * $Id: CourseGrade.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $ * *********************************************************************************** * * Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation, The MIT Corporation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.tool.gradebook; import java.math.BigDecimal; import java.util.Collection; import org.sakaiproject.service.gradebook.shared.GradebookService; /** * A CourseGrade is a GradableObject that represents the overall course grade * in a gradebook. * * @author <a href="mailto:jholtzman@berkeley.edu">Josh Holtzman </a> */ public class CourseGrade extends GradableObject { // Should only be used to fill in the DB column. private static final String COURSE_GRADE_NAME = "Course Grade"; public static String SORT_BY_OVERRIDE_GRADE = "override"; public static String SORT_BY_CALCULATED_GRADE = "autoCalc"; public static String SORT_BY_POINTS_EARNED = "pointsEarned"; private Double averageScore; public CourseGrade() { setName(COURSE_GRADE_NAME); } /** * @see org.sakaiproject.tool.gradebook.GradableObject#isCourseGrade() */ public boolean isCourseGrade() { return true; } /** * @see org.sakaiproject.tool.gradebook.GradableObject#isAssignment() */ public boolean isAssignment() { return false; } /** * @see org.sakaiproject.tool.gradebook.GradableObject#isCategory() */ public boolean getIsCategory() { return false; } //// Bean getters and setters //// /** * Calculate the mean course grade (whether entered or calulated) as a * percentage for all enrollments, leaving * students who've explicitly been given non-percentage-valued manual-only * course grades (such as "I" for incomplete) or null scores out of the calculation. */ public void calculateStatistics(Collection<CourseGradeRecord> gradeRecords, int numEnrollments) { // Ungraded but enrolled students count as if they have 0% in the course. int numScored = numEnrollments - gradeRecords.size(); BigDecimal total = new BigDecimal("0"); BigDecimal average = new BigDecimal("0"); for (CourseGradeRecord record : gradeRecords) { Double score = record.getGradeAsPercentage(); // Skip manual-only course grades. if ((record.getEnteredGrade() != null) && (score == null)) { continue; } if (score != null && record.getPointsEarned() != null) { average = average.add(new BigDecimal(record.getPointsEarned().toString())); total = total.add(new BigDecimal(score.toString())); numScored++; } // numScored++; } if (numScored == 0) { mean = null; averageScore = null; } else { mean = Double.valueOf(total.divide(new BigDecimal(numScored), GradebookService.MATH_CONTEXT).doubleValue()); averageScore = Double.valueOf(average.divide(new BigDecimal(numScored), GradebookService.MATH_CONTEXT).doubleValue()); } } public Double getAverageScore() { return averageScore; } public void setAverageScore(Double averageScore) { this.averageScore = averageScore; } }