diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java index a9cd8136382f5f9d68f2abc1d2c71211407fd7ec..e37fd73e229137e5e5187f80ce0cdf84395d3437 100644 --- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java @@ -558,7 +558,7 @@ public class QTI21AssessmentRunController extends BasicController implements Gen FileResourceManager frm = FileResourceManager.getInstance(); File fUnzippedDirRoot = frm.unzipFileResource(session.getTestEntry().getOlatResource()); URI assessmentObjectUri = qtiService.createAssessmentTestUri(fUnzippedDirRoot); - File submissionDir = qtiService.getAssessmentResultFile(session); + File submissionDir = qtiService.getSubmissionDirectory(session); String mapperUri = registerCacheableMapper(ureq, "QTI21CNResults::" + session.getTestEntry().getKey(), new ResourcesMapper(assessmentObjectUri, submissionDir)); diff --git a/src/main/java/org/olat/ims/qti21/ui/ResourcesMapper.java b/src/main/java/org/olat/ims/qti21/ui/ResourcesMapper.java index 7b5cf961347aa938dd9ca9e8acffcbf98255b5c3..e9a394e67fe543afcaa222122bd50fbd7ee81c0e 100644 --- a/src/main/java/org/olat/ims/qti21/ui/ResourcesMapper.java +++ b/src/main/java/org/olat/ims/qti21/ui/ResourcesMapper.java @@ -44,6 +44,7 @@ import org.olat.core.util.StringHelper; public class ResourcesMapper implements Mapper { private static final OLog log = Tracing.createLoggerFor(ResourcesMapper.class); + private static final String SUBMISSION_SUBPATH = "submissions/"; private final URI assessmentObjectUri; private final File submissionDirectory; @@ -92,14 +93,15 @@ public class ResourcesMapper implements Mapper { } else { resource = new ForbiddenMediaResource(); } - } else if(filename.endsWith("/raw/_noversion_/images/transparent.gif")) { + } else if(filename != null && filename.endsWith("/raw/_noversion_/images/transparent.gif")) { String realPath = request.getServletContext().getRealPath("/static/images/transparent.gif"); resource = new FileMediaResource(new File(realPath), true); } else { String submissionName = null; File storage = null; - if(filename.startsWith("submissions/")) { - String submission = filename.substring("submissions/".length()); + if(filename != null && filename.contains(SUBMISSION_SUBPATH)) { + int submissionIndex = filename.indexOf(SUBMISSION_SUBPATH) + SUBMISSION_SUBPATH.length(); + String submission = filename.substring(submissionIndex); int candidateSessionIndex = submission.indexOf('/'); if(candidateSessionIndex > 0) { submissionName = submission.substring(candidateSessionIndex + 1); @@ -109,7 +111,7 @@ public class ResourcesMapper implements Mapper { String sessionKey = submission.substring(0, candidateSessionIndex); if(StringHelper.isLong(sessionKey)) { try { - storage = submissionDirectoryMaps.get(new Long(sessionKey)); + storage = submissionDirectoryMaps.get(Long.valueOf(sessionKey)); } catch (Exception e) { log.error("", e); } diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectVelocityRenderDecorator.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectVelocityRenderDecorator.java index c4befae04680dcdc7b861fab1ca5d0bb119f8b79..a56595d39661c72bb48a29ef432e47b8dfcb3d30 100644 --- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectVelocityRenderDecorator.java +++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectVelocityRenderDecorator.java @@ -194,7 +194,7 @@ public class AssessmentObjectVelocityRenderDecorator extends VelocityRenderDecor } public String convertSubmissionLinkFull(String uri) { - return AssessmentRenderFunctions.convertSubmissionLink(avc, resolvedAssessmentItem, uri); + return AssessmentRenderFunctions.convertSubmissionLink(avc, uri); } public String getFormDispatchFieldId() { diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentRenderFunctions.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentRenderFunctions.java index af2273133dd3efcdc73b4baf1db5fa9dc2b1917a..da31b8c7bef8009d77446083f4441266ac80add9 100644 --- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentRenderFunctions.java +++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentRenderFunctions.java @@ -661,10 +661,9 @@ public class AssessmentRenderFunctions { return component.getMapperUri() + "/" + relativePath + "?href=" + relativePath; } - public static final String convertSubmissionLink(AssessmentObjectComponent component, ResolvedAssessmentItem resolvedAssessmentItem, String uri) { + public static final String convertSubmissionLink(AssessmentObjectComponent component, String uri) { String filename = getLinkFilename(uri); - String relativePath = component.relativePathTo(resolvedAssessmentItem); - return component.getSubmissionMapperUri() + "/submissions/" + filename + "?href=" + relativePath + (uri == null ? "" : uri); + return component.getSubmissionMapperUri() + "/submissions/" + filename + "?href=" + (uri == null ? "" : uri); } private static final String getLinkFilename(String uri) {