List of usage examples for org.w3c.dom Document getTextContent
public String getTextContent() throws DOMException;
From source file:Main.java
public static Document getdoc(String uri) throws Exception { uri = uri.replace(" ", "%20"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null;/* w w w .ja v a 2 s .c om*/ db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); doc = db.parse(new URL(uri).openStream()); if (doc == null || doc.getTextContent() == "") { throw new Exception(); } else return doc; }
From source file:org.kitodo.production.services.data.ImportService.java
/** * Convert given Document 'doc' to String and return it. * * @param doc the Document to be converted * @return the String content of the given Document */// w w w . jav a2s . c o m private static String convertDocumentToString(Document doc) { try { StringWriter writer = new StringWriter(); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(doc), new StreamResult(writer)); return writer.toString(); } catch (TransformerException e) { throw new ConfigException( "This document '" + doc.getTextContent() + "' can not be converted to String"); } }
From source file:org.sakaiproject.contentreview.compilatio.CompilatioReviewServiceImpl.java
@SuppressWarnings({ "deprecation" }) @Override/*w ww. j a v a 2s . c o m*/ public void checkForReports() { SimpleDateFormat dform = ((SimpleDateFormat) DateFormat.getDateInstance()); dform.applyPattern(COMPILATIO_DATETIME_FORMAT); log.info("Fetching reports from Compilatio"); // get the list of all items that are waiting for reports List<ContentReviewItem> awaitingReport = crqs.getAwaitingReports(getProviderId()); Iterator<ContentReviewItem> listIterator = awaitingReport.iterator(); HashMap<String, Integer> reportTable = new HashMap<>(); log.debug("There are " + awaitingReport.size() + " submissions awaiting reports"); int errors = 0; int success = 0; int inprogress = 0; ContentReviewItem currentItem; while (listIterator.hasNext()) { currentItem = (ContentReviewItem) listIterator.next(); // has the item reached its next retry time? if (currentItem.getNextRetryTime() == null) { currentItem.setNextRetryTime(new Date()); } if (currentItem.getNextRetryTime().after(new Date())) { // we haven't reached the next retry time log.info("checkForReports :: next retry time not yet reached for item: " + currentItem.getId()); crqs.update(currentItem); continue; } if (currentItem.getRetryCount() == null) { currentItem.setRetryCount(Long.valueOf(0)); currentItem.setNextRetryTime(this.getNextRetryTime(0)); } else if (currentItem.getRetryCount().intValue() > maxRetry) { processError(currentItem, ContentReviewConstants.CONTENT_REVIEW_SUBMISSION_ERROR_RETRY_EXCEEDED_CODE, null, null); errors++; continue; } else { long l = currentItem.getRetryCount().longValue(); log.debug("Still have retries left (" + l + " <= " + maxRetry + "), continuing. ItemID: " + currentItem.getId()); l++; currentItem.setRetryCount(Long.valueOf(l)); currentItem.setNextRetryTime(this.getNextRetryTime(Long.valueOf(l))); crqs.update(currentItem); } //back to analysis (this should not happen) if (StringUtils.isBlank(currentItem.getExternalId())) { currentItem .setStatus(Long.valueOf(ContentReviewConstants.CONTENT_REVIEW_SUBMISSION_ERROR_RETRY_CODE)); crqs.update(currentItem); errors++; continue; } if (!reportTable.containsKey(currentItem.getExternalId())) { // get the list from compilatio and see if the review is // available log.debug("Attempting to update hashtable with reports for site " + currentItem.getSiteId()); Map<String, String> params = CompilatioAPIUtil.packMap("action", "getDocument", "idDocument", currentItem.getExternalId()); Document document = null; try { document = compilatioConn.callCompilatioReturnDocument(params); } catch (TransientSubmissionException | SubmissionException e) { log.warn("Update failed : " + e.toString(), e); processError(currentItem, ContentReviewConstants.CONTENT_REVIEW_REPORT_ERROR_RETRY_CODE, e.getMessage(), null); errors++; continue; } Element root = document.getDocumentElement(); if (root.getElementsByTagName("documentStatus").item(0) != null) { log.debug("Report list returned successfully"); NodeList objects = root.getElementsByTagName("documentStatus"); log.debug(objects.getLength() + " objects in the returned list"); String status = getNodeValue("status", root); if ("ANALYSE_NOT_STARTED".equals(status)) { //send back to the process queue, we need no analyze it again processError(currentItem, ContentReviewConstants.CONTENT_REVIEW_SUBMISSION_ERROR_RETRY_CODE, "ANALYSE_NOT_STARTED", null); errors++; continue; } else if ("ANALYSE_COMPLETE".equals(status)) { String reportVal = getNodeValue("indice", root); currentItem.setReviewScore((int) Math.round(Double.parseDouble(reportVal))); currentItem .setStatus(ContentReviewConstants.CONTENT_REVIEW_SUBMITTED_REPORT_AVAILABLE_CODE); success++; } else { String progression = getNodeValue("progression", root); if (StringUtils.isNotBlank(progression)) { currentItem.setReviewScore((int) Double.parseDouble(progression)); inprogress++; } } currentItem.setDateReportReceived(new Date()); crqs.update(currentItem); log.debug("new report received: " + currentItem.getExternalId() + " -> " + currentItem.getReviewScore()); } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); errors++; } } } log.info("Finished fetching reports from Compilatio : " + success + " success items, " + inprogress + " in progress, " + errors + " errors"); }
From source file:org.sakaiproject.contentreview.impl.compilatio.CompilatioReviewServiceImpl.java
@SuppressWarnings({ "deprecation" }) @Override/*from w w w .j a v a2s . c o m*/ public void checkForReports() { SimpleDateFormat dform = ((SimpleDateFormat) DateFormat.getDateInstance()); dform.applyPattern(COMPILATIO_DATETIME_FORMAT); log.info("Fetching reports from Compilatio"); // get the list of all items that are waiting for reports Search search = new Search(); search.setConjunction(false); //OR clauses search.addRestriction(new Restriction("status", ContentReviewItem.SUBMITTED_AWAITING_REPORT_CODE)); search.addRestriction(new Restriction("status", ContentReviewItem.REPORT_ERROR_RETRY_CODE)); List<ContentReviewItem> awaitingReport = dao.findBySearch(ContentReviewItem.class, search); Iterator<ContentReviewItem> listIterator = awaitingReport.iterator(); log.debug("There are " + awaitingReport.size() + " submissions awaiting reports"); int errors = 0; int success = 0; int inprogress = 0; ContentReviewItem currentItem; while (listIterator.hasNext()) { currentItem = (ContentReviewItem) listIterator.next(); // has the item reached its next retry time? if (currentItem.getNextRetryTime() == null) { currentItem.setNextRetryTime(new Date()); } if (currentItem.getNextRetryTime().after(new Date())) { // we haven't reached the next retry time log.info("checkForReports :: next retry time not yet reached for item: " + currentItem.getId()); dao.update(currentItem); continue; } if (!processItem(currentItem)) { errors++; continue; } //back to analysis (this should not happen) if (StringUtils.isBlank(currentItem.getExternalId())) { currentItem.setStatus(Long.valueOf(ContentReviewItem.SUBMISSION_ERROR_RETRY_CODE)); dao.update(currentItem); errors++; continue; } // get the list from compilatio and see if the review is // available log.debug("Attempting to update hashtable with reports for site " + currentItem.getSiteId()); Map<String, String> params = CompilatioAPIUtil.packMap("action", "getDocument", "idDocument", currentItem.getExternalId()); Document document = null; try { document = compilatioConn.callCompilatioReturnDocument(params); } catch (TransientSubmissionException | SubmissionException e) { log.warn("Update failed : " + e.toString(), e); processError(currentItem, ContentReviewItem.REPORT_ERROR_RETRY_CODE, e.getMessage(), null); errors++; continue; } Element root = document.getDocumentElement(); if (root.getElementsByTagName("documentStatus").item(0) != null) { log.debug("Report list returned successfully"); NodeList objects = root.getElementsByTagName("documentStatus"); log.debug(objects.getLength() + " objects in the returned list"); String status = getNodeValue("status", root); if ("ANALYSE_NOT_STARTED".equals(status)) { //send back to the process queue, we need no analyze it again processError(currentItem, ContentReviewItem.SUBMISSION_ERROR_RETRY_CODE, "ANALYSE_NOT_STARTED", null); errors++; continue; } else if ("ANALYSE_COMPLETE".equals(status)) { String reportVal = getNodeValue("indice", root); currentItem.setReviewScore((int) Math.round(Double.parseDouble(reportVal))); currentItem.setStatus(ContentReviewItem.SUBMITTED_REPORT_AVAILABLE_CODE); success++; } else { String progression = getNodeValue("progression", root); if (StringUtils.isNotBlank(progression)) { currentItem.setReviewScore((int) Double.parseDouble(progression)); inprogress++; } } currentItem.setDateReportReceived(new Date()); dao.update(currentItem); log.debug("new report received: " + currentItem.getExternalId() + " -> " + currentItem.getReviewScore()); } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); } } log.info("Finished fetching reports from Compilatio : " + success + " success items, " + inprogress + " in progress, " + errors + " errors"); }
From source file:org.sakaiproject.contentreview.impl.turnitin.TurnitinMigrateSRC.java
/** * Call Turnitin Migrate function//from w w w.jav a 2s . c om * @throws SubmissionException * @throws TransientSubmissionException */ public void migrateSRC() throws SubmissionException, TransientSubmissionException { log.info("Starting SRC Migration"); Map params = new HashMap(); params.putAll(turnitinConn.getBaseTIIOptions()); params.put("fid", "99"); params.put("fcmd", "2"); params.put("utp", "2"); params.put("uem", "fid99@turnitin.com"); params.put("ufn", "FID99"); params.put("uln", "Turnitin"); Document document = null; try { document = turnitinConn.callTurnitinReturnDocument(params); } catch (TransientSubmissionException e) { log.debug("Update failed due to TransientSubmissionException error: " + e.toString()); } catch (SubmissionException e) { log.debug("Update failed due to SubmissionException error: " + e.toString()); } catch (Exception e) { log.debug(e.toString()); } Element root = document.getDocumentElement(); if (((CharacterData) (root.getElementsByTagName("rcode").item(0).getFirstChild())).getData().trim() .compareTo("99") == 0) { log.info("SRC Migration Successful"); } else { log.debug("SRC Migration Not Successful"); log.debug(document.getTextContent()); } }
From source file:org.sakaiproject.contentreview.impl.turnitin.TurnitinReviewServiceImpl.java
/** * Check Turnitin for grades and write them to the associated gradebook * @param data Map containing relevant IDs (site ID, Assignment ID, Title) *//*w w w . ja v a 2 s . c o m*/ public void syncGrades(Map<String, Object> data) { //Get session and check if gardes have already been synced Session sess = sessionManager.getCurrentSession(); boolean runOnce = gradesChecked(sess, data.get("taskId").toString()); boolean isStudent = isUserStudent(data.get("siteId").toString(), sess.getUserId()); if (turnitinConn.getUseGradeMark() && runOnce == false && isStudent == false) { log.info("Syncing Grades with Turnitin"); String siteId = data.get("siteId").toString(); String taskId = data.get("taskId").toString(); HashMap<String, Integer> reportTable = new HashMap<>(); HashMap<String, String> additionalData = new HashMap<>(); String tiiUserId; String assign = taskId; if (data.containsKey("assignment1")) { //Assignments 1 uses the actual title whereas Assignments 2 uses the ID assign = getAssignmentTitle(taskId); } //Run once sess.setAttribute("sync", taskId); //Get students enrolled on class in Turnitin Map<String, Object> enrollmentInfo = getAllEnrollmentInfo(siteId); //Get Associated GB item Assignment assignment = getAssociatedGbItem(data); //List submissions call Map params = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "fid", "10", "fcmd", "2", "tem", getTEM(siteId), "assign", assign, "assignid", taskId, "cid", siteId, "ctl", siteId, "utp", "2"); params.putAll(getInstructorInfo(siteId)); Document document = null; try { document = turnitinConn.callTurnitinReturnDocument(params); } catch (TransientSubmissionException e) { log.error(e); } catch (SubmissionException e) { log.warn("SubmissionException error. " + e); } Element root = document.getDocumentElement(); if (((CharacterData) (root.getElementsByTagName("rcode").item(0).getFirstChild())).getData().trim() .compareTo("72") == 0) { NodeList objects = root.getElementsByTagName("object"); String grade; log.debug(objects.getLength() + " objects in the returned list"); for (int i = 0; i < objects.getLength(); i++) { tiiUserId = ((CharacterData) (((Element) (objects.item(i))).getElementsByTagName("userid") .item(0).getFirstChild())).getData().trim(); additionalData.put("tiiUserId", tiiUserId); //Get GradeMark Grade try { grade = ((CharacterData) (((Element) (objects.item(i))).getElementsByTagName("score") .item(0).getFirstChild())).getData().trim(); reportTable.put("grade" + tiiUserId, Integer.valueOf(grade)); } catch (DOMException | NumberFormatException e) { //No score returned grade = ""; } catch (Exception e) { grade = ""; log.error("Unexpected exception getting grade", e); } if (!grade.equals("")) { //Update Grade ---------------- if (gradebookService.isGradebookDefined(siteId)) { writeGrade(assignment, data, reportTable, additionalData, enrollmentInfo); } } } } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); } } }
From source file:org.sakaiproject.contentreview.impl.turnitin.TurnitinReviewServiceImpl.java
@SuppressWarnings({ "deprecation", "unchecked" }) public void checkForReportsBulk() { SimpleDateFormat dform = ((SimpleDateFormat) DateFormat.getDateInstance()); dform.applyPattern(TURNITIN_DATETIME_FORMAT); log.info("Fetching reports from Turnitin"); // get the list of all items that are waiting for reports // but skip items with externalId = null, this happens when the LTI integration's callback fails. In this case, they'll be resubmitted by the queue job. // For the Sakai API integration, we should never enter the report state with externalId = null List<ContentReviewItem> awaitingReport = dao.findByProperties(ContentReviewItem.class, new String[] { "status", "externalId" }, new Object[] { ContentReviewItem.SUBMITTED_AWAITING_REPORT_CODE, "" }, new int[] { dao.EQUALS, dao.NOT_NULL }); awaitingReport.addAll(dao.findByProperties(ContentReviewItem.class, new String[] { "status", "externalId" }, new Object[] { ContentReviewItem.REPORT_ERROR_RETRY_CODE, "" }, new int[] { dao.EQUALS, dao.NOT_NULL })); Iterator<ContentReviewItem> listIterator = awaitingReport.iterator(); HashMap<String, Integer> reportTable = new HashMap<>(); log.debug("There are " + awaitingReport.size() + " submissions awaiting reports"); ContentReviewItem currentItem;// w w w. j ava 2 s. c om while (listIterator.hasNext()) { currentItem = (ContentReviewItem) listIterator.next(); try { // has the item reached its next retry time? if (currentItem.getNextRetryTime() == null) currentItem.setNextRetryTime(new Date()); else if (currentItem.getNextRetryTime().after(new Date())) { //we haven't reached the next retry time log.info("next retry time not yet reached for item: " + currentItem.getId()); dao.update(currentItem); continue; } if (currentItem.getRetryCount() == null) { currentItem.setRetryCount(Long.valueOf(0)); currentItem.setNextRetryTime(this.getNextRetryTime(0)); } else if (currentItem.getRetryCount().intValue() > maxRetry) { processError(currentItem, ContentReviewItem.SUBMISSION_ERROR_RETRY_EXCEEDED, null, null); continue; } else { log.debug("Still have retries left, continuing. ItemID: " + currentItem.getId()); // Moving down to check for report generate speed. //long l = currentItem.getRetryCount().longValue(); //l++; //currentItem.setRetryCount(Long.valueOf(l)); //currentItem.setNextRetryTime(this.getNextRetryTime(Long.valueOf(l))); //dao.update(currentItem); } Site s; try { s = siteService.getSite(currentItem.getSiteId()); } catch (IdUnusedException iue) { log.warn("checkForReportsBulk: Site " + currentItem.getSiteId() + " not found!" + iue.getMessage()); long l = currentItem.getRetryCount(); l++; currentItem.setRetryCount(l); currentItem.setNextRetryTime(this.getNextRetryTime(l)); currentItem.setLastError("Site not found"); dao.update(currentItem); continue; } ////////////////////////////// NEW LTI INTEGRATION /////////////////////////////// Optional<Date> dateOpt = getAssignmentCreationDate(currentItem.getTaskId()); if (dateOpt.isPresent() && siteAdvisor.siteCanUseLTIReviewServiceForAssignment(s, dateOpt.get())) { log.debug("getReviewScore using the LTI integration"); Map<String, String> ltiProps = new HashMap<>(); ltiProps = putInstructorInfo(ltiProps, currentItem.getSiteId()); String paperId = currentItem.getExternalId(); if (paperId == null) { log.warn("Could not find TII paper id for the content " + currentItem.getContentId()); long l = currentItem.getRetryCount(); l++; currentItem.setRetryCount(l); currentItem.setNextRetryTime(this.getNextRetryTime(l)); currentItem.setLastError("Could not find TII paper id for the submission"); dao.update(currentItem); continue; } TurnitinReturnValue result = tiiUtil.makeLTIcall(TurnitinLTIUtil.INFO_SUBMISSION, paperId, ltiProps); if (result.getResult() >= 0) { currentItem.setReviewScore(result.getResult()); currentItem.setStatus(ContentReviewItem.SUBMITTED_REPORT_AVAILABLE_CODE); currentItem.setDateReportReceived(new Date()); currentItem.setLastError(null); currentItem.setErrorCode(null); dao.update(currentItem); try { ContentResource resource = contentHostingService .getResource(currentItem.getContentId()); boolean itemUpdated = updateItemAccess(resource.getId()); if (!itemUpdated) { log.error("Could not update cr item access status"); } } catch (PermissionException | IdUnusedException | TypeException ex) { log.error("Could not update cr item access status", ex); } //log.debug("new report received: " + currentItem.getExternalId() + " -> " + currentItem.getReviewScore()); log.debug("new report received: " + paperId + " -> " + currentItem.getReviewScore()); } else { if (result.getResult() == -7) { log.debug("report is still pending for paper " + paperId); currentItem.setStatus(ContentReviewItem.SUBMITTED_AWAITING_REPORT_CODE); currentItem.setLastError(result.getErrorMessage()); currentItem.setErrorCode(result.getResult()); } else { log.error("Error making LTI call"); long l = currentItem.getRetryCount(); l++; currentItem.setRetryCount(l); currentItem.setNextRetryTime(this.getNextRetryTime(l)); currentItem.setStatus(ContentReviewItem.REPORT_ERROR_RETRY_CODE); currentItem.setLastError("Report Data Error: " + result.getResult()); } dao.update(currentItem); } continue; } ////////////////////////////// OLD API INTEGRATION /////////////////////////////// if (currentItem.getExternalId() == null || currentItem.getExternalId().equals("")) { currentItem.setStatus(Long.valueOf(4)); dao.update(currentItem); continue; } if (!reportTable.containsKey(currentItem.getExternalId())) { // get the list from turnitin and see if the review is available log.debug("Attempting to update hashtable with reports for site " + currentItem.getSiteId()); String fcmd = "2"; String fid = "10"; try { User user = userDirectoryService.getUser(currentItem.getUserId()); } catch (Exception e) { log.error("Unable to look up user: " + currentItem.getUserId() + " for contentItem: " + currentItem.getId(), e); } String cid = currentItem.getSiteId(); String tem = getTEM(cid); String utp = "2"; String assignid = currentItem.getTaskId(); String assign = currentItem.getTaskId(); String ctl = currentItem.getSiteId(); // TODO FIXME Current sgithens // Move the update setRetryAttempts to here, and first call and // check the assignment from TII to see if the generate until // due is enabled. In that case we don't want to waste retry // attempts and should just continue. try { // TODO FIXME This is broken at the moment because we need // to have a userid, but this is assuming it's coming from // the thread, but we're in a quartz job. //Map curasnn = getAssignment(currentItem.getSiteId(), currentItem.getTaskId()); // TODO FIXME Parameterize getAssignment method to take user information Map getAsnnParams = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "assign", getAssignmentTitle(currentItem.getTaskId()), "assignid", currentItem.getTaskId(), "cid", currentItem.getSiteId(), "ctl", currentItem.getSiteId(), "fcmd", "7", "fid", "4", "utp", "2"); getAsnnParams.putAll(getInstructorInfo(currentItem.getSiteId())); Map curasnn = turnitinConn.callTurnitinReturnMap(getAsnnParams); if (curasnn.containsKey("object")) { Map curasnnobj = (Map) curasnn.get("object"); String reportGenSpeed = (String) curasnnobj.get("generate"); String duedate = (String) curasnnobj.get("dtdue"); SimpleDateFormat retform = ((SimpleDateFormat) DateFormat.getDateInstance()); retform.applyPattern(TURNITIN_DATETIME_FORMAT); Date duedateObj = null; try { if (duedate != null) { duedateObj = retform.parse(duedate); } } catch (ParseException pe) { log.warn("Unable to parse turnitin dtdue: " + duedate, pe); } if (reportGenSpeed != null && duedateObj != null && reportGenSpeed.equals("2") && duedateObj.after(new Date())) { log.info("Report generate speed is 2, skipping for now. ItemID: " + currentItem.getId()); // If there was previously a transient error for this item, reset the status if (ContentReviewItem.REPORT_ERROR_RETRY_CODE.equals(currentItem.getStatus())) { currentItem.setStatus(ContentReviewItem.SUBMITTED_AWAITING_REPORT_CODE); currentItem.setLastError(null); currentItem.setErrorCode(null); dao.update(currentItem); } continue; } else { log.debug("Incrementing retry count for currentItem: " + currentItem.getId()); long l = currentItem.getRetryCount(); l++; currentItem.setRetryCount(l); currentItem.setNextRetryTime(this.getNextRetryTime(l)); dao.update(currentItem); } } } catch (SubmissionException | TransientSubmissionException e) { log.error( "Unable to check the report gen speed of the asnn for item: " + currentItem.getId(), e); } Map params = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "fid", fid, "fcmd", fcmd, "tem", tem, "assign", assign, "assignid", assignid, "cid", cid, "ctl", ctl, "utp", utp); params.putAll(getInstructorInfo(currentItem.getSiteId())); Document document; try { document = turnitinConn.callTurnitinReturnDocument(params); } catch (TransientSubmissionException e) { log.warn("Update failed due to TransientSubmissionException error: " + e.toString(), e); currentItem.setStatus(ContentReviewItem.REPORT_ERROR_RETRY_CODE); currentItem.setLastError(e.getMessage()); dao.update(currentItem); break; } catch (SubmissionException e) { log.warn("Update failed due to SubmissionException error: " + e.toString(), e); currentItem.setStatus(ContentReviewItem.REPORT_ERROR_RETRY_CODE); currentItem.setLastError(e.getMessage()); dao.update(currentItem); break; } Element root = document.getDocumentElement(); if (((CharacterData) (root.getElementsByTagName("rcode").item(0).getFirstChild())).getData() .trim().compareTo("72") == 0) { log.debug("Report list returned successfully"); NodeList objects = root.getElementsByTagName("object"); String objectId; String similarityScore; String overlap = ""; log.debug(objects.getLength() + " objects in the returned list"); for (int i = 0; i < objects.getLength(); i++) { similarityScore = ((CharacterData) (((Element) (objects.item(i))) .getElementsByTagName("similarityScore").item(0).getFirstChild())).getData() .trim(); objectId = ((CharacterData) (((Element) (objects.item(i))) .getElementsByTagName("objectID").item(0).getFirstChild())).getData().trim(); if (similarityScore.compareTo("-1") != 0) { overlap = ((CharacterData) (((Element) (objects.item(i))) .getElementsByTagName("overlap").item(0).getFirstChild())).getData().trim(); reportTable.put(objectId, Integer.valueOf(overlap)); } else { reportTable.put(objectId, -1); } log.debug("objectId: " + objectId + " similarity: " + similarityScore + " overlap: " + overlap); } } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); } } int reportVal; // check if the report value is now there (there may have been a // failure to get the list above) if (reportTable.containsKey(currentItem.getExternalId())) { reportVal = ((reportTable.get(currentItem.getExternalId()))); log.debug("reportVal for " + currentItem.getExternalId() + ": " + reportVal); if (reportVal != -1) { currentItem.setReviewScore(reportVal); currentItem.setStatus(ContentReviewItem.SUBMITTED_REPORT_AVAILABLE_CODE); currentItem.setDateReportReceived(new Date()); currentItem.setLastError(null); currentItem.setErrorCode(null); dao.update(currentItem); try { ContentResource resource = contentHostingService .getResource(currentItem.getContentId()); boolean itemUpdated = updateItemAccess(resource.getId()); if (!itemUpdated) { log.error("Could not update cr item access status"); } } catch (PermissionException | IdUnusedException | TypeException ex) { log.error("Could not update cr item access status", ex); } log.debug("new report received: " + currentItem.getExternalId() + " -> " + currentItem.getReviewScore()); } } } catch (Exception e) { log.error(e.getMessage() + "\n" + e.getStackTrace()); } } log.info("Finished fetching reports from Turnitin"); }
From source file:org.sakaiproject.contentreview.turnitin.TurnitinReviewServiceImpl.java
/** * Check Turnitin for grades and write them to the associated gradebook * /* w ww . j a va 2 s . c o m*/ * @param data * Map containing relevant IDs (site ID, Assignment ID, Title) */ public void syncGrades(Map<String, Object> data) { // Get session and check if gardes have already been synced Session sess = sessionManager.getCurrentSession(); boolean runOnce = gradesChecked(sess, data.get("taskId").toString()); boolean isStudent = isUserStudent(data.get("siteId").toString(), sess.getUserId()); if (turnitinConn.getUseGradeMark() && runOnce == false && isStudent == false) { log.info("Syncing Grades with Turnitin"); String siteId = data.get("siteId").toString(); String taskId = data.get("taskId").toString(); HashMap<String, Integer> reportTable = new HashMap<String, Integer>(); HashMap<String, String> additionalData = new HashMap<String, String>(); String tiiUserId = ""; String assign = taskId; if (data.containsKey("assignment1")) { // Assignments 1 uses the actual title whereas Assignments 2 // uses the ID assign = getAssignmentTitle(taskId); } // Run once sess.setAttribute("sync", taskId); // Get students enrolled on class in Turnitin Map<String, Object> enrollmentInfo = getAllEnrollmentInfo(siteId); // Get Associated GB item Assignment assignment = getAssociatedGbItem(data); // List submissions call Map params = new HashMap(); params = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "fid", "10", "fcmd", "2", "tem", getTEM(siteId), "assign", assign, "assignid", taskId, "cid", siteId, "ctl", siteId, "utp", "2"); params.putAll(getInstructorInfo(siteId)); Document document = null; try { document = turnitinConn.callTurnitinReturnDocument(params); } catch (TransientSubmissionException e) { log.error(e.getMessage()); } catch (SubmissionException e) { log.warn("SubmissionException error. " + e.getMessage()); } Element root = document.getDocumentElement(); if (((CharacterData) (root.getElementsByTagName("rcode").item(0).getFirstChild())).getData().trim() .compareTo("72") == 0) { NodeList objects = root.getElementsByTagName("object"); String grade = ""; log.debug(objects.getLength() + " objects in the returned list"); for (int i = 0; i < objects.getLength(); i++) { tiiUserId = ((CharacterData) (((Element) (objects.item(i))).getElementsByTagName("userid") .item(0).getFirstChild())).getData().trim(); additionalData.put("tiiUserId", tiiUserId); // Get GradeMark Grade try { grade = ((CharacterData) (((Element) (objects.item(i))).getElementsByTagName("score") .item(0).getFirstChild())).getData().trim(); reportTable.put("grade" + tiiUserId, Integer.valueOf(grade)); } catch (Exception e) { // No score returned grade = ""; } if (!grade.equals("")) { // Update Grade ---------------- if (gradebookService.isGradebookDefined(siteId)) { writeGrade(assignment, data, reportTable, additionalData, enrollmentInfo); } } } } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); } } }
From source file:org.sakaiproject.contentreview.turnitin.TurnitinReviewServiceImpl.java
@SuppressWarnings({ "deprecation", "unchecked" }) public void checkForReportsBulk() { SimpleDateFormat dform = ((SimpleDateFormat) DateFormat.getDateInstance()); dform.applyPattern(TURNITIN_DATETIME_FORMAT); log.info("Fetching reports from Turnitin"); // get the list of all items that are waiting for reports List<ContentReviewItem> awaitingReport = crqs.getAwaitingReports(getProviderId()); Iterator<ContentReviewItem> listIterator = awaitingReport.iterator(); HashMap<String, Integer> reportTable = new HashMap<String, Integer>(); log.debug("There are " + awaitingReport.size() + " submissions awaiting reports"); ContentReviewItem currentItem;//from ww w .j a v a 2 s. c om while (listIterator.hasNext()) { currentItem = (ContentReviewItem) listIterator.next(); // has the item reached its next retry time? if (currentItem.getNextRetryTime() == null) currentItem.setNextRetryTime(new Date()); if (currentItem.getNextRetryTime().after(new Date())) { // we haven't reached the next retry time log.info("next retry time not yet reached for item: " + currentItem.getId()); crqs.update(currentItem); continue; } if (currentItem.getRetryCount() == null) { currentItem.setRetryCount(Long.valueOf(0)); currentItem.setNextRetryTime(this.getNextRetryTime(0)); } else if (currentItem.getRetryCount().intValue() > maxRetry) { currentItem.setStatus(ContentReviewConstants.CONTENT_REVIEW_SUBMISSION_ERROR_RETRY_EXCEEDED_CODE); crqs.update(currentItem); continue; } else { log.debug("Still have retries left, continuing. ItemID: " + currentItem.getId()); // Moving down to check for report generate speed. // long l = currentItem.getRetryCount().longValue(); // l++; // currentItem.setRetryCount(Long.valueOf(l)); // currentItem.setNextRetryTime(this.getNextRetryTime(Long.valueOf(l))); // dao.update(currentItem); } if (currentItem.getExternalId() == null || currentItem.getExternalId().equals("")) { currentItem.setStatus(Long.valueOf(4)); crqs.update(currentItem); continue; } if (!reportTable.containsKey(currentItem.getExternalId())) { // get the list from turnitin and see if the review is available log.debug("Attempting to update hashtable with reports for site " + currentItem.getSiteId()); String fcmd = "2"; String fid = "10"; try { User user = userDirectoryService.getUser(currentItem.getUserId()); } catch (Exception e) { log.error("Unable to look up user: " + currentItem.getUserId() + " for contentItem: " + currentItem.getId(), e); } String cid = currentItem.getSiteId(); String tem = getTEM(cid); String utp = "2"; String assignid = currentItem.getTaskId(); String assign = currentItem.getTaskId(); String ctl = currentItem.getSiteId(); // TODO FIXME Current sgithens // Move the update setRetryAttempts to here, and first call and // check the assignment from TII to see if the generate until // due is enabled. In that case we don't want to waste retry // attempts and should just continue. try { // TODO FIXME This is broken at the moment because we need // to have a userid, but this is assuming it's coming from // the thread, but we're in a quartz job. // Map curasnn = getAssignment(currentItem.getSiteId(), // currentItem.getTaskId()); // TODO FIXME Parameterize getAssignment method to take user // information Map getAsnnParams = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "assign", getAssignmentTitle(currentItem.getTaskId()), "assignid", currentItem.getTaskId(), "cid", currentItem.getSiteId(), "ctl", currentItem.getSiteId(), "fcmd", "7", "fid", "4", "utp", "2"); getAsnnParams.putAll(getInstructorInfo(currentItem.getSiteId())); Map curasnn = turnitinConn.callTurnitinReturnMap(getAsnnParams); if (curasnn.containsKey("object")) { Map curasnnobj = (Map) curasnn.get("object"); String reportGenSpeed = (String) curasnnobj.get("generate"); String duedate = (String) curasnnobj.get("dtdue"); SimpleDateFormat retform = ((SimpleDateFormat) DateFormat.getDateInstance()); retform.applyPattern(TURNITIN_DATETIME_FORMAT); Date duedateObj = null; try { if (duedate != null) { duedateObj = retform.parse(duedate); } } catch (ParseException pe) { log.warn("Unable to parse turnitin dtdue: " + duedate, pe); } if (reportGenSpeed != null && duedateObj != null && reportGenSpeed.equals("2") && duedateObj.after(new Date())) { log.info( "Report generate speed is 2, skipping for now. ItemID: " + currentItem.getId()); // If there was previously a transient error for // this item, reset the status if (ContentReviewConstants.CONTENT_REVIEW_REPORT_ERROR_RETRY_CODE .equals(currentItem.getStatus())) { currentItem.setStatus( ContentReviewConstants.CONTENT_REVIEW_SUBMITTED_AWAITING_REPORT_CODE); currentItem.setLastError(null); currentItem.setErrorCode(null); crqs.update(currentItem); } continue; } else { log.debug("Incrementing retry count for currentItem: " + currentItem.getId()); long l = currentItem.getRetryCount().longValue(); l++; currentItem.setRetryCount(Long.valueOf(l)); currentItem.setNextRetryTime(this.getNextRetryTime(Long.valueOf(l))); crqs.update(currentItem); } } } catch (SubmissionException e) { log.error("Unable to check the report gen speed of the asnn for item: " + currentItem.getId(), e); } catch (TransientSubmissionException e) { log.error("Unable to check the report gen speed of the asnn for item: " + currentItem.getId(), e); } Map params = new HashMap(); // try { params = TurnitinAPIUtil.packMap(turnitinConn.getBaseTIIOptions(), "fid", fid, "fcmd", fcmd, "tem", tem, "assign", assign, "assignid", assignid, "cid", cid, "ctl", ctl, "utp", utp); params.putAll(getInstructorInfo(currentItem.getSiteId())); Document document = null; try { document = turnitinConn.callTurnitinReturnDocument(params); } catch (TransientSubmissionException e) { log.warn("Update failed due to TransientSubmissionException error: " + e.toString(), e); currentItem.setStatus(ContentReviewConstants.CONTENT_REVIEW_REPORT_ERROR_RETRY_CODE); currentItem.setLastError(e.getMessage()); crqs.update(currentItem); break; } catch (SubmissionException e) { log.warn("Update failed due to SubmissionException error: " + e.toString(), e); currentItem.setStatus(ContentReviewConstants.CONTENT_REVIEW_REPORT_ERROR_RETRY_CODE); currentItem.setLastError(e.getMessage()); crqs.update(currentItem); break; } Element root = document.getDocumentElement(); if (((CharacterData) (root.getElementsByTagName("rcode").item(0).getFirstChild())).getData().trim() .compareTo("72") == 0) { log.debug("Report list returned successfully"); NodeList objects = root.getElementsByTagName("object"); String objectId; String similarityScore; String overlap = ""; log.debug(objects.getLength() + " objects in the returned list"); for (int i = 0; i < objects.getLength(); i++) { similarityScore = ((CharacterData) (((Element) (objects.item(i))) .getElementsByTagName("similarityScore").item(0).getFirstChild())).getData().trim(); objectId = ((CharacterData) (((Element) (objects.item(i))).getElementsByTagName("objectID") .item(0).getFirstChild())).getData().trim(); if (similarityScore.compareTo("-1") != 0) { overlap = ((CharacterData) (((Element) (objects.item(i))) .getElementsByTagName("overlap").item(0).getFirstChild())).getData().trim(); reportTable.put(objectId, Integer.valueOf(overlap)); } else { reportTable.put(objectId, Integer.valueOf(-1)); } log.debug("objectId: " + objectId + " similarity: " + similarityScore + " overlap: " + overlap); } } else { log.debug("Report list request not successful"); log.debug(document.getTextContent()); } } int reportVal; // check if the report value is now there (there may have been a // failure to get the list above) if (reportTable.containsKey(currentItem.getExternalId())) { reportVal = ((Integer) (reportTable.get(currentItem.getExternalId()))).intValue(); log.debug("reportVal for " + currentItem.getExternalId() + ": " + reportVal); if (reportVal != -1) { currentItem.setReviewScore(reportVal); currentItem.setStatus(ContentReviewConstants.CONTENT_REVIEW_SUBMITTED_REPORT_AVAILABLE_CODE); currentItem.setDateReportReceived(new Date()); crqs.update(currentItem); log.debug("new report received: " + currentItem.getExternalId() + " -> " + currentItem.getReviewScore()); } } } log.info("Finished fetching reports from Turnitin"); }