package exercise.situation; import java.io.*; import java.util.*; public class SituationEvaluator { // Should implement Evaluator... public static SituationEvaluation evaluateSubmission(SituationSubmission submission) { String studentID = submission.getStudentID(); String exerciseID = submission.getExerciseID(); String submissionID = submission.getSubmissionID(); try { SituationSolution soln = SituationSolution.loadSolution(exerciseID); Set solnSet = convertToSet(soln.getSituations()); Set subnSet = convertToSet(submission.getSituations()); // Does the student pass? boolean passed; int numReq = soln.getNumRequired(); if (numReq == SituationSolution.ALL_REQUIRED) { passed = solnSet.equals(subnSet); } else { boolean sizeOK = (numReq == SituationSolution.UNSPECIFIED_NUM_REQUIRED || numReq == subnSet.size()); passed = sizeOK && solnSet.containsAll(subnSet); } SituationEvaluation eval = new SituationEvaluation( studentID, exerciseID, submissionID, passed); // Save the evaluation to the persistent store. try { SituationEvaluation.saveEvaluation(eval); } catch (Exception e) { System.out.println( "SituationEvaluator.evaluateSubmission(): " + "Unable to save evaluation."); } // Return the evaluation as feedback. return eval; } catch (IOException e) { System.err.println("SituationEvaluator.evaluateSubmission(): " + "Failed to load a solution; returning null."); return null; } } protected static Set convertToSet(int[][] situations) { // Use Set and Vector to get rid of duplicate elements. Set set = new HashSet(); for (int i = 0; i < situations.length; i++) { Vector situation = new Vector(); for (int j = 0; j < situations[i].length; j++) { situation.add(new Integer(situations[i][j])); } set.add(situation); } return set; } }