package fi.utu.ville.exercises.stub; import java.util.List; import fi.utu.ville.exercises.model.ExecutionSettings; import fi.utu.ville.exercises.model.Executor; import fi.utu.ville.exercises.model.ExerciseData; import fi.utu.ville.exercises.model.ExerciseException; import fi.utu.ville.exercises.model.ExerciseTypeDescriptor; import fi.utu.ville.exercises.model.StatisticalSubmissionInfo; import fi.utu.ville.exercises.model.SubmissionInfo; import fi.utu.ville.exercises.model.SubmissionStatisticsGiver; import fi.utu.ville.exercises.model.SubmissionVisualizer; import fi.utu.ville.standardutils.Localizer; import fi.utu.ville.standardutils.TempFilesManager; /** * A class containing factory-methods for loading exercise-type implementors of different {@link fi.utu.ville.exercises.model}-interfaces with correct data for * testing. * * @author Riku Haavisto * */ final class StubExertypeClassLoader { private StubExertypeClassLoader() { } /** * Loads a new {@link Executor} with {@link ExerciseData} and possibly latest {@link SubmissionInfo} associated with exercise with given name. * * @param descriptor * {@link ExerciseTypeDescriptor} of the exercise-type to use * @param exerName * name for the exercise to resolve given {@link ExerciseData} and {@link SubmissionInfo}s * @param localizer * {@link Localizer} for localizing the UI * @param fbSettings * {@link ExecutionSettings} to use when testing the {@link Executor} * @param tempMan * {@link TempFilesManager} for managing temporary files * @return loaded {@link Executor} * @throws ExerciseException * if there is an error in loading the {@link Executor} */ public static <E extends ExerciseData, S extends SubmissionInfo> Executor<E, S> loadExecutor(ExerciseTypeDescriptor<E, S> descriptor, String exerName, Localizer localizer, ExecutionSettings fbSettings, TempFilesManager tempMan) throws ExerciseException { Executor<E, S> res = descriptor.newExerciseExecutor(); S submData = StubDataFilesHandler.loadLatestSubmInfo( descriptor.getSubDataClass(), descriptor, exerName, tempMan); E exertypeData = StubDataFilesHandler.loadExerTypeData( descriptor.getTypeDataClass(), descriptor.newExerciseXML(), descriptor, exerName, tempMan); res.initialize(localizer, exertypeData, submData, tempMan, fbSettings); return res; } /** * Loads a new {@link SubmissionVisualizer} with {@link ExerciseData} and latest {@link SubmissionInfo} associated with exercise with given name.. * * @param descriptor * {@link ExerciseTypeDescriptor} of the exercise-type to use * @param exerName * name for the exercise to resolve given {@link ExerciseData} and {@link SubmissionInfo}s * @param localizer * {@link Localizer} for localizing the UI * @param tempMan * {@link TempFilesManager} * @return loaded {@link SubmissionVisualizer} * @throws ExerciseException * if there is an error in loading the {@link Executor} */ public static <E extends ExerciseData, S extends SubmissionInfo> SubmissionVisualizer<E, S> loadVisualizer( ExerciseTypeDescriptor<E, S> descriptor, String exerName, Localizer localizer, TempFilesManager tempMan) throws ExerciseException { SubmissionVisualizer<E, S> res = descriptor.newSubmissionVisualizer(exerName,localizer); S submData = StubDataFilesHandler.loadLatestSubmInfo( descriptor.getSubDataClass(), descriptor, exerName, tempMan); if (submData == null) { return null; } E exertypeData = StubDataFilesHandler.loadExerTypeData( descriptor.getTypeDataClass(), descriptor.newExerciseXML(), descriptor, exerName, tempMan); res.initialize(exertypeData, submData, localizer, tempMan); return res; } /** * Loads a new {@link SubmissionStatisticsGiver} with {@link ExerciseData} and all {@link SubmissionInfo}s associated with exercise with given name. * * @param descriptor * {@link ExerciseTypeDescriptor} of the exercise-type to use * @param exerName * name for the exercise to resolve given {@link ExerciseData} and {@link SubmissionInfo}s * @param localizer * {@link Localizer} for localizing the UI * @param fbSettings * {@link ExecutionSettings} to use when testing the {@link Executor} * @param tempMan * {@link TempFilesManager} * @return loaded {@link Executor} * @throws ExerciseException * if there is an error in loading the {@link Executor} */ public static <E extends ExerciseData, S extends SubmissionInfo> SubmissionStatisticsGiver<E, S> loadStatisticsGiver( ExerciseTypeDescriptor<E, S> descriptor, String exerName, Localizer localizer, TempFilesManager tempMan) throws ExerciseException { SubmissionStatisticsGiver<E, S> res = descriptor.newStatisticsGiver(); List<StatisticalSubmissionInfo<S>> allSubmissions = StubDataFilesHandler .loadAllSubmissions(descriptor, exerName, descriptor.getSubDataClass(), tempMan); E exertypeData = StubDataFilesHandler.loadExerTypeData( descriptor.getTypeDataClass(), descriptor.newExerciseXML(), descriptor, exerName, tempMan); res.initialize(exertypeData, allSubmissions, localizer, tempMan); return res; } }