Index: lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookServlet.java =================================================================== diff -u -r70c9d10dc6ff0f092d0f57b9dc7dff564b3816b0 -rba02b25ed114a8defd228f42252e9dc7556fddb6 --- lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookServlet.java (.../GradebookServlet.java) (revision 70c9d10dc6ff0f092d0f57b9dc7dff564b3816b0) +++ lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookServlet.java (.../GradebookServlet.java) (revision ba02b25ed114a8defd228f42252e9dc7556fddb6) @@ -85,7 +85,6 @@ UserDbLoader userLoader = UserDbLoader.Default.getInstance(); CourseMembershipDbLoader courseMembershipLoader = CourseMembershipDbLoader.Default.getInstance(); ScoreDbLoader scoreLoader = ScoreDbLoader.Default.getInstance(); - ScoreDbPersister scorePersister = ScoreDbPersister.Default.getInstance(); // get Parameter values String userName = request.getParameter(Constants.PARAM_USER_ID); @@ -147,11 +146,7 @@ Document document = db.parse(is); Node lesson = document.getDocumentElement().getFirstChild(); - Long maxResult = new Long(lesson.getAttributes().getNamedItem("lessonMaxPossibleMark").getNodeValue()); - Node learnerResult = lesson.getFirstChild(); - String userTotalMarkStr = learnerResult.getAttributes().getNamedItem("userTotalMark").getNodeValue(); - double userResult = StringUtil.isEmpty(userTotalMarkStr) ? 0 : new Double(userTotalMarkStr); Lineitem lineitem = LineitemUtil.getLineitem(userId, lamsLessonIdParam); if (lineitem == null) { @@ -173,17 +168,11 @@ currentScore.setLineitemId(lineitem.getId()); currentScore.setCourseMembershipId(courseMembership.getId()); } - - //set score grade. if Lams supplies one (and lineitem will have score type) we set score; otherwise (and - // lineitme of type Complete/Incomplete) we set 0 - double gradebookMark = 0; - if (maxResult > 0) { - gradebookMark = (userResult / maxResult) * Constants.GRADEBOOK_POINTS_POSSIBLE; - } - currentScore.setGrade(new DecimalFormat("##.##").format(gradebookMark)); - currentScore.validate(); - scorePersister.persist(currentScore); + //updates and persists currentScore in the DB + LineitemUtil.updateScoreBasedOnLamsResponse(lesson, learnerResult, currentScore); + + //the following paragraph is kept due to the Ernie's request to keep it for potential usage in the future // NodeList activities = document.getDocumentElement().getFirstChild().getChildNodes(); // // float maxResult = 0; Index: lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookSyncServlet.java =================================================================== diff -u -r67bf7cc2eed9d841593d383cf139d63a65e1a8a6 -rba02b25ed114a8defd228f42252e9dc7556fddb6 --- lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookSyncServlet.java (.../GradebookSyncServlet.java) (revision 67bf7cc2eed9d841593d383cf139d63a65e1a8a6) +++ lams_bb_integration/src/org/lamsfoundation/ld/integration/blackboard/GradebookSyncServlet.java (.../GradebookSyncServlet.java) (revision ba02b25ed114a8defd228f42252e9dc7556fddb6) @@ -88,7 +88,6 @@ Context ctx = ctxMgr.setContext(request); CourseMembershipDbLoader courseMemLoader = CourseMembershipDbLoader.Default.getInstance(); ScoreDbLoader scoreLoader = ScoreDbLoader.Default.getInstance(); - ScoreDbPersister scorePersister = ScoreDbPersister.Default.getInstance(); // get Parameter values String lamsLessonIdParam = request.getParameter(Constants.PARAM_LESSON_ID); @@ -130,7 +129,6 @@ DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(is); Node lesson = document.getDocumentElement().getFirstChild(); - Long lessonMaxPossibleMark = new Long(lesson.getAttributes().getNamedItem("lessonMaxPossibleMark").getNodeValue()); NodeList learnerResults = lesson.getChildNodes(); //in order to reduce DB queries we get scores and courseMemberships all at once @@ -158,34 +156,24 @@ String extUsername = learnerResult.getAttributes().getNamedItem("extUsername").getNodeValue(); if (userName.equals(extUsername)) { - String userTotalMarkStr = learnerResult.getAttributes().getNamedItem("userTotalMark") - .getNodeValue(); - if (!StringUtil.isEmpty(userTotalMarkStr)) { - double newScore = new Double(userTotalMarkStr); - - //update old score - if (currentScore == null) { - currentScore = new Score(); - currentScore.setLineitemId(lineitem.getId()); - currentScore.setCourseMembershipId(courseMembershipId); - } - - // set score grade. if Lams supplies one (and lineitem will have score type) we set score; otherwise (and - // lineitme of type Complete/Incomplete) we set 0 - double gradebookMark = 0; - if (lessonMaxPossibleMark > 0) { - gradebookMark = (newScore / lessonMaxPossibleMark) * Constants.GRADEBOOK_POINTS_POSSIBLE; - } - - //calculate how many marks updated - if (StringUtil.isEmpty(currentScore.getGrade()) || ! new Double(currentScore.getGrade()).equals(new Double(gradebookMark))) { - numberUpdatedScores++; - } - - currentScore.setGrade(new DecimalFormat("##.##").format(gradebookMark)); - currentScore.validate(); - scorePersister.persist(currentScore); + + //update old score + if (currentScore == null) { + currentScore = new Score(); + currentScore.setLineitemId(lineitem.getId()); + currentScore.setCourseMembershipId(courseMembershipId); } + + //updates and persists currentScore in the DB + double gradebookMark = LineitemUtil.updateScoreBasedOnLamsResponse(lesson, learnerResult, + currentScore); + + //calculate how many marks updated + if (StringUtil.isEmpty(currentScore.getGrade()) + || !new Double(currentScore.getGrade()).equals(new Double(gradebookMark))) { + numberUpdatedScores++; + } + break; } } Index: lams_bb_integration/src/org/lamsfoundation/ld/integration/util/LineitemUtil.java =================================================================== diff -u -r8ecc1e772ccaef985dae29263651dc3a6dcbc8c8 -rba02b25ed114a8defd228f42252e9dc7556fddb6 --- lams_bb_integration/src/org/lamsfoundation/ld/integration/util/LineitemUtil.java (.../LineitemUtil.java) (revision 8ecc1e772ccaef985dae29263651dc3a6dcbc8c8) +++ lams_bb_integration/src/org/lamsfoundation/ld/integration/util/LineitemUtil.java (.../LineitemUtil.java) (revision ba02b25ed114a8defd228f42252e9dc7556fddb6) @@ -27,6 +27,7 @@ import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; +import java.text.DecimalFormat; import java.util.List; import java.util.Set; @@ -39,13 +40,15 @@ import org.lamsfoundation.ld.integration.Constants; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; import org.xml.sax.SAXException; import blackboard.data.ValidationException; import blackboard.data.content.Content; import blackboard.data.content.CourseDocument; import blackboard.data.course.Course; import blackboard.data.gradebook.Lineitem; +import blackboard.data.gradebook.Score; import blackboard.data.gradebook.impl.OutcomeDefinition; import blackboard.data.gradebook.impl.OutcomeDefinitionScale; import blackboard.persist.BbPersistenceManager; @@ -57,13 +60,15 @@ import blackboard.persist.course.CourseDbLoader; import blackboard.persist.gradebook.LineitemDbLoader; import blackboard.persist.gradebook.LineitemDbPersister; +import blackboard.persist.gradebook.ScoreDbPersister; import blackboard.persist.gradebook.ext.OutcomeDefinitionScaleDbLoader; import blackboard.persist.gradebook.ext.OutcomeDefinitionScaleDbPersister; import blackboard.persist.gradebook.impl.OutcomeDefinitionDbPersister; import blackboard.platform.persistence.PersistenceServiceFactory; import blackboard.portal.data.ExtraInfo; import blackboard.portal.data.PortalExtraInfo; import blackboard.portal.servlet.PortalUtil; +import blackboard.util.StringUtil; public class LineitemUtil { @@ -429,4 +434,37 @@ //get lineitem return LineitemUtil.getLineitem(bbContentId == null ? "" : bbContentId, userId, lamsLessonIdParam); } + + /** + * Updates and persists currentScore in the DB. + * + * @param lesson + * @param learnerResult + * @param currentScore provided score must be initialized (can't be null) + * @throws PersistenceException + * @throws ValidationException + */ + public static double updateScoreBasedOnLamsResponse(Node lesson, Node learnerResult, Score currentScore) + throws PersistenceException, ValidationException { + ScoreDbPersister scorePersister = ScoreDbPersister.Default.getInstance(); + + Long lessonMaxPossibleMark = new Long( + lesson.getAttributes().getNamedItem("lessonMaxPossibleMark").getNodeValue()); + String userTotalMarkStr = learnerResult.getAttributes().getNamedItem("userTotalMark").getNodeValue(); + + double newScore = StringUtil.isEmpty(userTotalMarkStr) ? 0 : new Double(userTotalMarkStr); + + //set score grade. if Lams supplies one (and lineitem will have score type) we set score; otherwise (and + // lineitme of type Complete/Incomplete) we set 0 + double gradebookMark = 0; + if (lessonMaxPossibleMark > 0) { + gradebookMark = (newScore / lessonMaxPossibleMark) * Constants.GRADEBOOK_POINTS_POSSIBLE; + } + + currentScore.setGrade(new DecimalFormat("##.##").format(gradebookMark)); + currentScore.validate(); + scorePersister.persist(currentScore); + + return gradebookMark; + } }