protected void processOutcomeXml( HttpServletRequest request, HttpServletResponse response, String lti_message_type, String sourcedid, IMSPOXRequest pox) throws java.io.IOException { // Things look good - time to process the grade boolean isRead = BasicLTIUtil.equals(lti_message_type, "readResultRequest"); boolean isDelete = BasicLTIUtil.equals(lti_message_type, "deleteResultRequest"); Map<String, String> bodyMap = pox.getBodyMap(); String result_resultscore_textstring = bodyMap.get("/resultRecord/result/resultScore/textString"); String result_resultdata_text = bodyMap.get("/resultRecord/result/resultData/text"); String sourced_id = bodyMap.get("/resultRecord/result/sourcedId"); // System.out.println("comment="+result_resultdata_text); // System.out.println("grade="+result_resultscore_textstring); if (BasicLTIUtil.isBlank(result_resultscore_textstring) && !isRead && !isDelete) { doErrorXML(request, response, pox, "outcomes.missing", "result_resultscore_textstring", null); return; } // Lets return an XML Response Map<String, Object> theMap = new TreeMap<String, Object>(); String theGrade = null; boolean success = false; String message = null; Object retval = null; boolean strict = ServerConfigurationService.getBoolean(SakaiBLTIUtil.LTI_STRICT, false); try { Double dGrade; if (isRead) { retval = SakaiBLTIUtil.getGrade(sourcedid, request, ltiService); String sGrade = ""; String comment = ""; if (retval instanceof Map) { Map grade = (Map) retval; comment = (String) grade.get("comment"); dGrade = (Double) grade.get("grade"); if (dGrade != null) { sGrade = dGrade.toString(); } } else { Object check = SakaiBLTIUtil.checkSourceDid(sourcedid, request, ltiService); if (check instanceof Boolean && ((Boolean) check)) { // Read fail with Good SourceDID is treated as empty } else { doErrorXML(request, response, pox, "outcomes.fail", (String) retval, null); return; } } theMap.put("/readResultResponse/result/sourcedId", sourced_id); theMap.put("/readResultResponse/result/resultScore/textString", sGrade); theMap.put("/readResultResponse/result/resultScore/language", "en"); if (!strict) { theMap.put("/readResultResponse/result/resultData/text", comment); } message = "Result read"; } else if (isDelete) { retval = SakaiBLTIUtil.deleteGrade(sourcedid, request, ltiService); if (retval instanceof String) { doErrorXML(request, response, pox, "outcomes.fail", (String) retval, null); return; } theMap.put("/deleteResultResponse", ""); message = "Result deleted"; } else { dGrade = new Double(result_resultscore_textstring); if (dGrade < 0.0 || dGrade > 1.0) { throw new Exception("Grade out of range"); } dGrade = new Double(result_resultscore_textstring); retval = SakaiBLTIUtil.setGrade(sourcedid, request, ltiService, dGrade, result_resultdata_text); if (retval instanceof String) { doErrorXML(request, response, pox, "outcomes.fail", (String) retval, null); return; } theMap.put("/replaceResultResponse", ""); message = "Result replaced"; } success = true; } catch (Exception e) { doErrorXML(request, response, pox, "outcome.grade.fail", e.getMessage(), e); } if (!success) return; String output = null; String theXml = ""; if (theMap.size() > 0) theXml = XMLMap.getXMLFragment(theMap, true); output = pox.getResponseSuccess(message, theXml); response.setContentType("application/xml"); PrintWriter out = response.getWriter(); out.println(output); M_log.debug(output); }
protected void processOutcome( HttpServletRequest request, HttpServletResponse response, String lti_message_type, String sourcedid, Map<String, Object> theMap) throws java.io.IOException { // Things look good - time to process the grade boolean isRead = BasicLTIUtil.equals(lti_message_type, "basic-lis-readresult"); boolean isDelete = BasicLTIUtil.equals(lti_message_type, "basic-lis-deleteresult"); String result_resultscore_textstring = request.getParameter("result_resultscore_textstring"); String result_resultdata_text = request.getParameter("result_resultdata_text"); if (BasicLTIUtil.isBlank(result_resultscore_textstring) && !isRead) { doError(request, response, theMap, "outcomes.missing", "result_resultscore_textstring", null); return; } String theGrade = null; boolean success = false; Object retval = null; try { Double dGrade; if (isRead) { retval = SakaiBLTIUtil.getGrade(sourcedid, request, ltiService); if (retval instanceof Map) { Map grade = (Map) retval; dGrade = (Double) grade.get("grade"); theMap.put("/message_response/result/resultscore/textstring", dGrade.toString()); theMap.put("/message_response/result/resultdata/text", (String) grade.get("comment")); } else { // Read fail with Good SourceDID is treated as empty Object check = SakaiBLTIUtil.checkSourceDid(sourcedid, request, ltiService); if (check instanceof Boolean && ((Boolean) check)) { theMap.put("/message_response/result/resultscore/textstring", ""); theMap.put("/message_response/result/resultdata/text", ""); } else { doError(request, response, theMap, "outcome.fail", (String) retval, null); return; } } } else if (isDelete) { retval = SakaiBLTIUtil.deleteGrade(sourcedid, request, ltiService); } else { dGrade = new Double(result_resultscore_textstring); retval = SakaiBLTIUtil.setGrade(sourcedid, request, ltiService, dGrade, result_resultdata_text); } success = true; theMap.put("/message_response/statusinfo/codemajor", "Success"); theMap.put("/message_response/statusinfo/severity", "Status"); theMap.put("/message_response/statusinfo/codeminor", "fullsuccess"); } catch (Exception e) { doError(request, response, theMap, "outcome.grade.fail", "", e); } if (!success) return; String theXml = XMLMap.getXML(theMap, true); PrintWriter out = response.getWriter(); out.println(theXml); }