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 dbf5c15c562ad920e5216c37a5afdbdef48a45c9..898c1763f9da179f820b897c174fdb8616192e0a 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 ca6b3dd307116a1bf765ef23ffa725547ae40df2..2a6a8a2c5eec27fcc380268c1146928637baf94f 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 Logger 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 8a1bb0809535a8b1cd25c604f637734db5c856ae..d95fc58e03929cb74e0f9e64a0f0612bac436005 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 678f3ebafd3b82e0691fae6ad449c984629aa092..d54ef1081e39e8df7f3ee834401fd4a95686805e 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) {