From badc02492bd5b0b23b3850bcd147694a5c0f7541 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 9 Feb 2017 20:49:36 +0100 Subject: [PATCH] OO-2519: prevent some caching, fix wrong submission directory --- .../ui/QTI21AssessmentDetailsController.java | 12 +- ...iesAssessmentItemCorrectionController.java | 137 ++++++++++-------- ...ityAssessmentTestCorrectionController.java | 6 +- 3 files changed, 85 insertions(+), 70 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java index 4da8b8738a2..97798f72f83 100644 --- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java @@ -279,7 +279,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController { AssessmentTestSession row = tableModel.getObject(se.getIndex()); row = qtiService.getAssessmentTestSession(row.getKey()); if("open".equals(cmd)) { - if(row.getTerminationTime() == null) { + if(row.getFinishTime() == null) { doConfirmPullSession(ureq, row); } else { doOpenResult(ureq, row); @@ -363,8 +363,8 @@ public class QTI21AssessmentDetailsController extends FormBasicController { FileResourceManager frm = FileResourceManager.getInstance(); File fUnzippedDirRoot = frm.unzipFileResource(session.getTestEntry().getOlatResource()); URI assessmentObjectUri = qtiService.createAssessmentObjectUri(fUnzippedDirRoot); - File submissionDir = qtiService.getAssessmentResultFile(session); - String mapperUri = registerCacheableMapper(null, "QTI21Resources::" + session.getTestEntry().getKey(), + File submissionDir = qtiService.getSubmissionDirectory(session); + String mapperUri = registerCacheableMapper(null, "QTI21DetailsResources::" + session.getKey(), new ResourcesMapper(assessmentObjectUri, submissionDir)); resultCtrl = new AssessmentResultController(ureq, getWindowControl(), assessedIdentity, false, session, @@ -381,7 +381,13 @@ public class QTI21AssessmentDetailsController extends FormBasicController { @Override public int compare(AssessmentTestSession a1, AssessmentTestSession a2) { Date t1 = a1.getTerminationTime(); + if(t1 == null) { + t1 = a1.getFinishTime(); + } Date t2 = a2.getTerminationTime(); + if(t2 == null) { + t2 = a2.getFinishTime(); + } int c; if(t1 == null && t2 == null) { diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java index 34aadde934d..286b622136b 100644 --- a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java +++ b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentitiesAssessmentItemCorrectionController.java @@ -124,7 +124,7 @@ public class IdentitiesAssessmentItemCorrectionController extends FormBasicContr interactions = assessmentItem.getItemBody().findInteractions(); resourcesMapper = new ResourcesMapper(assessmentObjectUri, submissionDirectoryMaps); - mapperUri = registerCacheableMapper(null, "QTI21Resources::" + testEntry.getKey(), resourcesMapper); + mapperUri = registerCacheableMapper(null, "QTI21CorrectionsResources::" + testEntry.getKey(), resourcesMapper); initForm(ureq); } @@ -228,34 +228,43 @@ public class IdentitiesAssessmentItemCorrectionController extends FormBasicContr if(itemResults != null) { for(IdentityAssessmentItemWrapper itemResult:itemResults) { - String scoreVal = itemResult.getScoreEl().getValue(); - itemResult.getScoreEl().clearError(); - try { - double score = Double.parseDouble(scoreVal); - //check boundaries - - boolean boundariesOk = true; - if(itemResult.getMinScore() != null && score < itemResult.getMinScoreVal().doubleValue()) { - boundariesOk &= false; - } - if(itemResult.getMaxScore() != null && score > itemResult.getMaxScoreVal().doubleValue()) { - boundariesOk &= false; - } - - if(!boundariesOk) { - itemResult.getScoreEl() - .setErrorKey("correction.min.max.score", new String[]{ itemResult.getMinScore(), itemResult.getMaxScore() }); - } - allOk &= boundariesOk; - } catch(Exception e) { - itemResult.getScoreEl().setErrorKey("form.error.nointeger", null); - allOk &= false; - } + allOk &= validateItemResults(itemResult); } } return allOk & super.validateFormLogic(ureq); } + + private boolean validateItemResults(IdentityAssessmentItemWrapper itemResult) { + boolean allOk = true; + + String scoreVal = itemResult.getScoreEl().getValue(); + itemResult.getScoreEl().clearError(); + if(StringHelper.containsNonWhitespace(scoreVal)) { + try { + double score = Double.parseDouble(scoreVal); + //check boundaries + + boolean boundariesOk = true; + if(itemResult.getMinScore() != null && score < itemResult.getMinScoreVal().doubleValue()) { + boundariesOk &= false; + } + if(itemResult.getMaxScore() != null && score > itemResult.getMaxScoreVal().doubleValue()) { + boundariesOk &= false; + } + + if(!boundariesOk) { + itemResult.getScoreEl() + .setErrorKey("correction.min.max.score", new String[]{ itemResult.getMinScore(), itemResult.getMaxScore() }); + } + allOk &= boundariesOk; + } catch(Exception e) { + itemResult.getScoreEl().setErrorKey("form.error.nointeger", null); + allOk &= false; + } + } + return allOk; + } @Override protected void formOK(UserRequest ureq) { @@ -265,8 +274,10 @@ public class IdentitiesAssessmentItemCorrectionController extends FormBasicContr @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(nextQuestionButton == source) { - doSave(); - fireEvent(ureq, Event.DONE_EVENT); + if(validateFormLogic(ureq)) { + doSave(); + fireEvent(ureq, Event.DONE_EVENT); + } } super.formInnerEvent(ureq, source, event); } @@ -277,48 +288,46 @@ public class IdentitiesAssessmentItemCorrectionController extends FormBasicContr } private void doSave() { - if(itemResults != null) { - + if(itemResults == null) return; + + for(IdentityAssessmentItemWrapper itemResult:itemResults) { + AssessmentItemCorrection itemCorrection = itemResult.getCorrection(); + TestSessionState testSessionState = itemCorrection.getTestSessionState(); + AssessmentTestSession candidateSession = itemCorrection.getTestSession(); + AssessmentSessionAuditLogger candidateAuditLogger = qtiService.getAssessmentSessionAuditLogger(candidateSession, false); - for(IdentityAssessmentItemWrapper itemResult:itemResults) { - AssessmentItemCorrection itemCorrection = itemResult.getCorrection(); - TestSessionState testSessionState = itemCorrection.getTestSessionState(); - AssessmentTestSession candidateSession = itemCorrection.getTestSession(); - AssessmentSessionAuditLogger candidateAuditLogger = qtiService.getAssessmentSessionAuditLogger(candidateSession, false); + String scoreVal = itemResult.getScoreEl().getValue(); + if(StringHelper.containsNonWhitespace(scoreVal)) { + BigDecimal mScore = new BigDecimal(scoreVal); + String stringuifiedIdentifier = itemResult + .getTestPlanNodeKey().getIdentifier().toString(); - String scoreVal = itemResult.getScoreEl().getValue(); - if(StringHelper.containsNonWhitespace(scoreVal)) { - BigDecimal mScore = new BigDecimal(scoreVal); - String stringuifiedIdentifier = itemResult - .getTestPlanNodeKey().getIdentifier().toString(); - - ParentPartItemRefs parentParts = AssessmentTestHelper - .getParentSection(itemResult.getTestPlanNodeKey(), testSessionState, resolvedAssessmentTest); - AssessmentItemSession itemSession = qtiService - .getOrCreateAssessmentItemSession(candidateSession, parentParts, stringuifiedIdentifier); - itemSession.setManualScore(mScore); - itemSession = qtiService.updateAssessmentItemSession(itemSession); - itemCorrection.setItemSession(itemSession); - - candidateAuditLogger.logCorrection(candidateSession, itemSession, getIdentity()); - } + ParentPartItemRefs parentParts = AssessmentTestHelper + .getParentSection(itemResult.getTestPlanNodeKey(), testSessionState, resolvedAssessmentTest); + AssessmentItemSession itemSession = qtiService + .getOrCreateAssessmentItemSession(candidateSession, parentParts, stringuifiedIdentifier); + itemSession.setManualScore(mScore); + itemSession = qtiService.updateAssessmentItemSession(itemSession); + itemCorrection.setItemSession(itemSession); - BigDecimal totalScore = null; - for(AssessmentItemCorrection corr:testCorrections.getCorrections(itemCorrection.getAssessedIdentity())) { - BigDecimal mScore = corr.getManualScore(); - if(totalScore == null) { - totalScore = mScore; - } else if(mScore != null) { - totalScore = totalScore.add(mScore); - } + candidateAuditLogger.logCorrection(candidateSession, itemSession, getIdentity()); + } + + BigDecimal totalScore = null; + for(AssessmentItemCorrection corr:testCorrections.getCorrections(itemCorrection.getAssessedIdentity())) { + BigDecimal mScore = corr.getManualScore(); + if(totalScore == null) { + totalScore = mScore; + } else if(mScore != null) { + totalScore = totalScore.add(mScore); } - - candidateSession.setManualScore(totalScore); - candidateSession = qtiService.updateAssessmentTestSession(candidateSession); - itemCorrection.setTestSession(candidateSession); - - IOUtils.closeQuietly(candidateAuditLogger); - } + } + + candidateSession.setManualScore(totalScore); + candidateSession = qtiService.updateAssessmentTestSession(candidateSession); + itemCorrection.setTestSession(candidateSession); + + IOUtils.closeQuietly(candidateAuditLogger); } } } \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentityAssessmentTestCorrectionController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentityAssessmentTestCorrectionController.java index a48549ac5b1..d4ec11af466 100644 --- a/src/main/java/org/olat/ims/qti21/ui/assessment/IdentityAssessmentTestCorrectionController.java +++ b/src/main/java/org/olat/ims/qti21/ui/assessment/IdentityAssessmentTestCorrectionController.java @@ -112,9 +112,9 @@ public class IdentityAssessmentTestCorrectionController extends FormBasicControl ImsQTI21Resource.createResolvingResourceLocator(fileResourceLocator); assessmentObjectUri = qtiService.createAssessmentObjectUri(fUnzippedDirRoot); - File submissionFile = qtiService.getSubmissionDirectory(candidateSession); - mapperUri = registerCacheableMapper(null, "QTI21Resources::" + testEntry.getKey(), - new ResourcesMapper(assessmentObjectUri, submissionFile)); + File submissionDir = qtiService.getSubmissionDirectory(candidateSession); + mapperUri = registerCacheableMapper(null, "QTI21CorrectionResources::" + session.getKey(), + new ResourcesMapper(assessmentObjectUri, submissionDir)); resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(fUnzippedDirRoot, false, false); testSessionState = qtiService.loadTestSessionState(candidateSession); -- GitLab