Gradebook API Changes

New proposed changes to the API (8/20/2008)

Our new strategy is to inject a new Spring bean into Sakai that overrides the default GradebookManagerHibernateImpl calculations
and incorporates our new logic (for drop lowest/highest, for extra credit, for weighting within a category).

It will still be necessary to put in the data model changes.

M1 : Gradebook API Changes : Drop Lowest / Highest Grade

To modify the calculations to ensure that "drop lowest" functionality correctly calculates the grades, omitting the X lowest scores for that Category, will require some extensive changes to the GradebookManagerHibernateImpl class, including modifications of the following methods:

  • getStudentCourseGradeRecord()
  • getTotalPointsInternal()
  • getTotalPointsEarnedInternal()

Unfortunately, it looks like this will involve some significant rewriting of these calculations, since currently the calculation of (a) total possible points over all graded assignments is separate from the (b) calculation of total received points, and to determine which assignments for a given user should be dropped out of the total possible points will require a scaled score to be calculated for each user's performance on each assignment at the time when it's being decided whether to include those possible points in the (a) total.

(star) Note that there is already a "drop_lowest" property in the Category class and hibernate table mapping, and the createCategory() method in the BaseHibernateManager class as well as the matching signature of the GradebookManager interface. So in effect, the necessary changes to store this data have already been made.

M1 : Gradebook API Changes : Extra Credit Grade Items

A boolean property will need to be added to the Assignment class and GradeableObject hibernate mapping for the sub-class Assignment.

Calculations will need to be changed. Note that these changes will in many cases happen in the same code as the changes for "Drop Lowest".

M1 : Gradebook API Changes : Exclude a Grade Item from Grading

Looks like this is similar to the Drop Lowest Grade. They all seem to follow the same pattern that we have to make changes to a data model object all the way up to the db to store this flag in a sensible place, then make changes to the calculations themselves, which seem to all be in the GradebookManagerHibernateImpl Class.

The nice thing for this change is that I think all we need to do is modify the hibernate queries to exclude items with this new flag (e.g. "IS_EXCLUDED=Y" or something along those lines).

Here are the methods that look like they're going to have to be touched:

  1. getTotalPointsEarnedInternal() – both signatures
  2. getTotalPointsInternal() – both signatures
  3. getLiteralTotalPointsInternal() – both signatures
M1 : Gradebook API Changes : New Statistics

Files to be modified

Assignment.java

CourseGrade.java

Looks like we can probably do all of our calculations inside of Assignment.calculateStatistics() for the individual assignments and CourseGrade.calculateStatistics() for the overall gradebook. These methods are where the mean is currently being calculated.

M1 : Gradebook API Changes : Allow for Equal Weighting within a Weighted Category

These changes are going to touch the same files as the other two changes above.

Looks like we are going to need to add a property to store assignment weighting for the internal Assignment class