private File getSessionStateFile(final CandidateEvent candidateEvent) { final CandidateSession candidateSession = candidateEvent.getCandidateSession(); final AssessmentObjectType assessmentType = candidateSession.getDelivery().getAssessment().getAssessmentType(); final String stateFileBaseName = assessmentType == AssessmentObjectType.ASSESSMENT_ITEM ? "itemSessionState" : "testSessionState"; final File sessionFolder = filespaceManager.obtainCandidateSessionStateStore(candidateSession); final String stateFileName = stateFileBaseName + candidateEvent.getId() + ".xml"; return new File(sessionFolder, stateFileName); }
/** * Wraps the given {@link ItemSessionState} in a {@link ItemSessionController}. * * <p>It is assumed that the item was runnable, so this will never return null. */ public ItemSessionController createItemSessionController( final CandidateSession candidateSession, final ItemSessionState itemSessionState, final NotificationRecorder notificationRecorder) { final User candidate = candidateSession.getCandidate(); final Delivery delivery = candidateSession.getDelivery(); ensureItemDelivery(delivery); Assert.notNull(itemSessionState, "itemSessionState"); /* Try to resolve the underlying JQTI+ object */ final AssessmentPackage assessmentPackage = assessmentDataService.ensureSelectedAssessmentPackage(delivery); final ItemProcessingMap itemProcessingMap = assessmentObjectManagementService.getItemProcessingMap(assessmentPackage); if (itemProcessingMap == null) { throw new QtiWorksLogicException("Expected this item to be runnable"); } /* Create config for ItemSessionController */ final ItemDeliverySettings itemDeliverySettings = (ItemDeliverySettings) assessmentDataService.getEffectiveDeliverySettings(candidate, delivery); final ItemSessionControllerSettings itemSessionControllerSettings = new ItemSessionControllerSettings(); itemSessionControllerSettings.setTemplateProcessingLimit( computeTemplateProcessingLimit(itemDeliverySettings)); itemSessionControllerSettings.setMaxAttempts(itemDeliverySettings.getMaxAttempts()); /* Create controller and wire up notification recorder (if passed) */ final ItemSessionController result = new ItemSessionController( jqtiExtensionManager, itemSessionControllerSettings, itemProcessingMap, itemSessionState); if (notificationRecorder != null) { result.addNotificationListener(notificationRecorder); } return result; }
/** * Wraps the given {@link TestSessionState} in a {@link TestSessionController}. * * <p>It is assumed that the test was runnable, so this will never return null. */ public TestSessionController createTestSessionController( final CandidateSession candidateSession, final TestSessionState testSessionState, final NotificationRecorder notificationRecorder) { final User candidate = candidateSession.getCandidate(); final Delivery delivery = candidateSession.getDelivery(); ensureTestDelivery(delivery); Assert.notNull(testSessionState, "testSessionState"); /* Try to resolve the underlying JQTI+ object */ final AssessmentPackage assessmentPackage = assessmentDataService.ensureSelectedAssessmentPackage(delivery); final TestProcessingMap testProcessingMap = assessmentObjectManagementService.getTestProcessingMap(assessmentPackage); if (testProcessingMap == null) { return null; } /* Create config for TestSessionController */ final TestDeliverySettings testDeliverySettings = (TestDeliverySettings) assessmentDataService.getEffectiveDeliverySettings(candidate, delivery); final TestSessionControllerSettings testSessionControllerSettings = new TestSessionControllerSettings(); testSessionControllerSettings.setTemplateProcessingLimit( computeTemplateProcessingLimit(testDeliverySettings)); /* Create controller and wire up notification recorder (if passed) */ final TestSessionController result = new TestSessionController( jqtiExtensionManager, testSessionControllerSettings, testProcessingMap, testSessionState); if (notificationRecorder != null) { result.addNotificationListener(notificationRecorder); } return result; }